我正在使用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);
我已经覆盖了所有没有内容代码的方法。
然后,如果我引发这样的例外:
try {
throw new Exception("ERROR TEST");
} catch (Exception e1) {
e1.printStackTrace();
}
该异常在控制台和日志文件中不可见。 但如果我在没有try / catch的情况下引发这样的异常:
int iii = 1/0;
iii = iii+1;
异常是可见的并且一直显示在控制台和日志文件中。 为什么?在两种情况下是例外/错误。
答案 0 :(得分:0)
我不知道您的记录器是如何初始化的,但您可以尝试在根记录器上设置格式化程序(在记录器上调用lapply(mydf, function(x) x[!duplicated(x[c("Val")]), ])
直到parent()
)。
另一种方法是更改全局模板本身而不是覆盖它。这可以通过编程方式或通过命令行完成。
null
查看该类的javadoc是如何构造模板的。
答案 1 :(得分:0)
如果您已经拥有自定义格式化程序,则使用格式化程序的最佳方法是将其作为WildFly中的模块。从那里,您可以在WildFly中将其添加为custom-formatter
,并将其分配给您想要查看该格式的处理程序。
以下是一些CLI命令的示例:
module add --name=com.example.formatter --resources=/path/to/formatter.jar
/subsystem=logging/custom-formatter=my-formatter:add(class=com.example.formatter.MyCustomFormatter, module=com.example.formatter)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=my-formatter)
以上内容会将您的格式化程序用于写入控制台的所有消息。您可以将其更改为使用不同的处理程序,或者只是将新处理程序分配给特定的日志类别。
有一点需要注意的是,你不应该像你正在做的那样改变代码中的日志管理器。这将更改容器和容器内所有部署的日志记录。