【发布时间】:2017-07-12 12:38:13
【问题描述】:
我正在使用 Java 和 Jboss 开发一个 Web 应用程序。
我使用 java logger java.util.logging 来记录消息。
我对使应用程序具有自定义标题标题的所有输出消息感兴趣。例如:
[21.2.2017 13:25:28][CERT:1642 ENS:5][ERROR]: java.lang.ArithmeticException: / by zero
自定义标题标题在哪里:
[21.2.2017 13:25:28][CERT:1642 ENS:5][ERROR]
我已经能够做到,创建一个自定义(扩展 java.util.logging.Formatter)。
Logger logger = null;
StreamHandler handler = null;
MyCustomFormatter format = null;
logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME + "." + custom_name);
format = new MyCustomFormatter();
handler = new StreamHandler(System.out, format);
logger.addHandler(handler);
我只能在明确调用记录器的情况下显示标题标题。例如:
代码中的任意位置:
logger.info(msg);在捕获异常中:
logger.severe(e.printStackTrace());
我想在所有消息中添加此标题,也在我无法使用 try/catch 控制的错误或异常消息中添加此标题。
我该怎么办?
编辑 1
我的自定义记录器有一个父记录器,而这个父记录器有根记录器。
Logger.getLogger("")
|------> Logger.getLogger("global")
|------> Logger.getLogger(Logger.GLOBAL_LOGGER_NAME + "." + custom_name)
我做了一个测试。我创建了一个自定义PrintStream 和OutputStream 以避免错误不会显示在控制台和日志文件上,将其设置为System.err:
CustomNullPrintStream pse = new CustomNullPrintStream(new CustomNullOutputStream());
System.setErr(pse);
- CustomNullPrintStream 扩展 PrintStream
- CustomNullPrintStream 扩展了 OutputStream
我已经覆盖了所有没有内容代码的方法。
那么,如果我引发这样的异常:
try {
throw new Exception("ERROR TEST");
} catch (Exception e1) {
e1.printStackTrace();
}
异常在控制台和日志文件中不可见。 但是如果我在没有 try/catch 的情况下引发这样的异常:
int iii = 1/0;
iii = iii+1;
异常是可见的,并一直显示在控制台和日志文件中。 为什么?在两种情况下是异常/错误。
【问题讨论】:
-
您使用的是哪个版本的 JBoss AS、JBoss EAP 或 WildFly?
-
嗨@JamesR.Perkins,我在Eclipse IDE 中使用WildFly 8 (8.2.1.Final) 和Java (jdk 1.8.0_121)。
-
消息的
[CERT:1642 ENS:5]部分来自哪里?日期格式很容易使用模式格式化程序。另一部分可能也是。 -
我创建了一个自定义标题标题。结构在哪里:
[date hour] [ids that identifies the current user (it isn't the WildFly user, is the object instance of user)][type of message]:
标签: java exception logging jboss wildfly