我是一位长期读者,但是第一次写作.

我目前正在尝试在代码库中使用AspectJ实现一个记录器. AspectJ似乎运行良好,但我遇到了非常奇怪的Java错误.我是一个长期的C和.Net开发人员,他仍然适应Java的世界,所以如果这是一个愚蠢的问题我很抱歉.

我的代码试图捕获异常,并将相关信息记录到文本文件中.陷阱工作正常,但我注意到,当我部署时,我没有得到任何数据.我在Java反编译器中打开了我的类文件,并注意到PrintWriter似乎正在生成错误.我从来没有见过像这样的问题,所以我希望你可以有任何见解.

package mil.uscg.c3cen.vic.aspect;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.AfterThrowing;

import org.aspectj.lang.JoinPoint;

@Aspect

public class LoggingAspect

{

private final String LOG_FILE = "aspectLog.txt";

private final File file = new File(LOG_FILE);

private LoggingAspect()

{

}

private void logException(String msg)

{

try

{

if(!file.exists())

file.createNewFile();

}

catch(IOException e)

{

}

try (FileWriter fw = new FileWriter(file);

BufferedWriter bw = new BufferedWriter(fw);

PrintWriter pw = new PrintWriter(bw))

{

pw.println(msg);

}

catch(IOException e)

{

}

}

private String getSimpleFunctionInfo(String className, String function, Object[] args)

{

StringBuilder builder = new StringBuilder();

builder.append(". Method: ");

builder.append(className);

builder.append(".");

builder.append(function);

if(args.length == 0)

{

builder.append("()");

return builder.toString();

}

builder.append("(");

for(Object o : args)

{

builder.append(o.toString());

builder.append(",");

}

// Replace the comma for the last param with a closing parenthesis

int len = builder.length();

builder.replace(len -1, len, ")");

return builder.toString();

}

// Returns a formatted exception. "Exception.ErrorMessage"

private String getSimpleExceptionInfo(String name, String msg)

{

StringBuilder builder = new StringBuilder();

builder.append("Exception caught: ");

builder.append(name);

builder.append(". Message: ");

builder.append(msg);

return builder.toString();

}

@AfterThrowing(pointcut = "execution(* mil.uscg.c3cen.*.*.*(..)) "

//+ "&& !within(mil.uscg.c3cen.vic.aspect.*) "

, throwing = "excep")

public void afterThrowing(JoinPoint jp, Throwable excep) throws Throwable

{

String ex = getSimpleExceptionInfo(excep.getClass().getSimpleName(),

excep.getMessage());

String name = getSimpleFunctionInfo(jp.getSignature().getDeclaringType().getSimpleName(),

jp.getSignature().getName(),

jp.getArgs());

StringBuilder builder = new StringBuilder();

builder.append(ex);

builder.append(name);

logException(builder.toString());

}

}

除了函数logException之外,一切看起来都像在类文件中一样.

/* Error */

private void logException(String msg)

{

// Byte code:

// 0: aload_0

// 1: getfield 25 mil/uscg/c3cen/vic/aspect/LoggingAspect:file Ljava/io/File;

// 4: invokevirtual 32 java/io/File:exists ()Z

// 7: ifne +15 -> 22

// 10: aload_0

// 11: getfield 25 mil/uscg/c3cen/vic/aspect/LoggingAspect:file Ljava/io/File;

// 14: invokevirtual 36 java/io/File:createNewFile ()Z

// 17: pop

// 18: goto +4 -> 22

// 21: pop

// 22: aconst_null

// 23: astore_2

// 24: aconst_null

// 25: astore_3

// 26: new 39 java/io/FileWriter

// 29: dup

// 30: aload_0

// 31: getfield 25 mil/uscg/c3cen/vic/aspect/LoggingAspect:file Ljava/io/File;

// 34: invokespecial 41 java/io/FileWriter: (Ljava/io/File;)V

// 37: astore 4

// 39: new 44 java/io/BufferedWriter

// 42: dup

// 43: aload 4

// 45: invokespecial 46 java/io/BufferedWriter: (Ljava/io/Writer;)V

// 48: astore 5

// 50: new 49 java/io/PrintWriter

// 53: dup

// 54: aload 5

// 56: invokespecial 51 java/io/PrintWriter: (Ljava/io/Writer;)V

// 59: astore 6

// 61: aload 6

// 63: aload_1

// 64: invokevirtual 52 java/io/PrintWriter:println (Ljava/lang/String;)V

// 67: aload 6

// 69: ifnull +24 -> 93

// 72: aload 6

// 74: invokevirtual 55 java/io/PrintWriter:close ()V

// 77: goto +16 -> 93

// 80: astore_2

// 81: aload 6

// 83: ifnull +8 -> 91

// 86: aload 6

// 88: invokevirtual 55 java/io/PrintWriter:close ()V

// 91: aload_2

// 92: athrow

// 93: aload 5

// 95: ifnull +43 -> 138

// 98: aload 5

// 100: invokevirtual 58 java/io/BufferedWriter:close ()V

// 103: goto +35 -> 138

// 106: astore_3

// 107: aload_2

// 108: ifnonnull +8 -> 116

// 111: aload_3

// 112: astore_2

// 113: goto +13 -> 126

// 116: aload_2

// 117: aload_3

// 118: if_acmpeq +8 -> 126

// 121: aload_2

// 122: aload_3

// 123: invokevirtual 59 java/lang/Throwable:addSuppressed (Ljava/lang/Throwable;)V

// 126: aload 5

// 128: ifnull +8 -> 136

// 131: aload 5

// 133: invokevirtual 58 java/io/BufferedWriter:close ()V

// 136: aload_2

// 137: athrow

// 138: aload 4

// 140: ifnull +66 -> 206

// 143: aload 4

// 145: invokevirtual 65 java/io/FileWriter:close ()V

// 148: goto +58 -> 206

// 151: astore_3

// 152: aload_2

// 153: ifnonnull +8 -> 161

// 156: aload_3

// 157: astore_2

// 158: goto +13 -> 171

// 161: aload_2

// 162: aload_3

// 163: if_acmpeq +8 -> 171

// 166: aload_2

// 167: aload_3

// 168: invokevirtual 59 java/lang/Throwable:addSuppressed (Ljava/lang/Throwable;)V

// 171: aload 4

// 173: ifnull +8 -> 181

// 176: aload 4

// 178: invokevirtual 65 java/io/FileWriter:close ()V

// 181: aload_2

// 182: athrow

// 183: astore_3

// 184: aload_2

// 185: ifnonnull +8 -> 193

// 188: aload_3

// 189: astore_2

// 190: goto +13 -> 203

// 193: aload_2

// 194: aload_3

// 195: if_acmpeq +8 -> 203

// 198: aload_2

// 199: aload_3

// 200: invokevirtual 59 java/lang/Throwable:addSuppressed (Ljava/lang/Throwable;)V

// 203: aload_2

// 204: athrow

// 205: pop

// 206: return

// Line number table:

// Java source line #28 -> byte code offset #0

// Java source line #29 -> byte code offset #10

// Java source line #30 -> byte code offset #18

// Java source line #31 -> byte code offset #21

// Java source line #36 -> byte code offset #22

// Java source line #36 -> byte code offset #26

// Java source line #37 -> byte code offset #39

// Java source line #38 -> byte code offset #50

// Java source line #40 -> byte code offset #61

// Java source line #41 -> byte code offset #67

// Java source line #42 -> byte code offset #205

// Java source line #46 -> byte code offset #206

// Local variable table:

// start length slot name signature

// 0 207 0 this LoggingAspect

// 0 207 1 msg String

// 23 1 2 localObject1 Object

// 80 28 2 localObject2 Object

// 112 92 2 localObject3 Object

// 25 1 3 localObject4 Object

// 106 17 3 localThrowable1 Throwable

// 151 17 3 localThrowable2 Throwable

// 183 17 3 localThrowable3 Throwable

// 37 140 4 fw java.io.FileWriter

// 48 84 5 bw java.io.BufferedWriter

// 59 28 6 pw java.io.PrintWriter

// 21 1 12 localIOException1 java.io.IOException

// 205 1 13 localIOException2 java.io.IOException

// Exception table:

// from to target type

// 0 18 21 java/io/IOException

// 61 67 80 finally

// 50 93 106 finally

// 39 138 151 finally

// 26 183 183 finally

// 22 205 205 java/io/IOException

}

这真的让我难过,所以任何信息都会非常感激.谢谢!

java的printwriter_Java PrintWriter错误相关推荐

  1. java的printwriter_Java PrintWriter.print()写入数据

    首页 > 基础教程 > IO流 > Writer类 Java PrintWriter.print()写入数据 java中PrintWriter.print()主要用来创建一个文件并向 ...

  2. “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法

    前言:今天为了做作业,在 github 上面下载了个项目,然后在运行项目时发现报错,在此记录一下 " Error:(1, 1) java: 非法字符: '\ufeff' "错误的解 ...

  3. java运行出现JNI错误,JDK8和JDK11都安装了

    java运行出现JNI错误,JDK8和JDK11都安装了 1. 问题描述 2. 尝试办法 3. 解决办法 3.1 解决方法: 3.2 测试结果成功 1. 问题描述 因为编程的需要,所以我安装了JDK8 ...

  4. java kryo_kryo序列化 - Java序列化期间的错误

    我的应用程序有大量域对象,它们通过spring-session被序列化到Redis存储中.我试图使用Kryo(4.0.0)进行自动序列化,而不使对象明确可序列化.kryo序列化 - Java序列化期间 ...

  5. java.lang.arr_jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误的解决

    评论 # re: jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误的解决 [未登录] 2007-04-29 20:14 Robin 不错,实践 ...

  6. 命令行下运行 java someClass.class出现 “错误:找不到或无法加载主类someClass ” 的解决方案

    命令行下运行 java someClass.class出现 "错误:找不到或无法加载主类someClass " 的解决方案 参考文章: (1)命令行下运行 java someCla ...

  7. java最最长的错误,Java开发中遇到最多的异常是什么?最后一个最多最难!

    作者:终端研发部 NO.1 Java.alng.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初 ...

  8. java.lang.OutOfMemoryError处理错误

    java.lang.OutOfMemoryError异常解决方法 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空, ...

  9. Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'错误的解决

    运行java.exe 出现Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'错误 以前就出现过,觉得自己环 ...

最新文章

  1. topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
  2. 按指定格式拼接字符串
  3. oracle asm 删除diskgroup,ASM磁盘组删除DISK操作
  4. 西南民族大学计算机考试试题,西南民族大学预科教育学院 2007级《计算机》模拟试题(含答案)...
  5. tomcat下多个app 不同的图标_iOS平台设计规范(五)图标与图片
  6. 有关objc中的单例
  7. 《团队-科学计算器-模块开发过程》
  8. VUE使用过滤器来格式化当前时间
  9. jsp servlet mysql 乱码_关于jsp和servlet中的乱码问题
  10. CS224N笔记——Word Window分类与神经网络
  11. php smarty 翻译标签,Smarty自定义block标签
  12. 激光计算机论文,激光技术论文(2)
  13. android免费ocr软件,安卓ocr软件那个好用 免费安卓ocr文字识别软件推荐
  14. postman Could not send request
  15. python学习笔记 Counter()
  16. 一张图理解栈顶指针加加减减的问题
  17. 基金指数温度怎么算_10分钟学会计算指数温度,挑选指数基金
  18. C语言键盘方向键的读入
  19. 【MySQL】绿色版下载配置教程(Windows)
  20. 支持随时随地一键开会,华为云会议场景适用性更强!

热门文章

  1. 做游戏的小伙伴们注意了,DDoS还可以这样破!
  2. MySQL 执行原生sql
  3. NKOJ2317 英语四六级考试
  4. js的简单介绍及基本用法
  5. CSS ::selection 选中文字效果
  6. Spring Security笔记:HTTP Basic 认证
  7. [UI界面]-UIWindow
  8. UVA 644 - Immediate Decodability
  9. c语言xyz最小值,有关问题XYZ的10种语言解决方案(一)之C语言篇
  10. 从C语言到C++的进阶之一些C基础上的增强用法(篇五)