java在所有级别上记录过去的一些日志消息(在异常情况下),在正常情况下记录信息级别
出于某些故障排除原因,如果发生异常,我希望从跟踪级别记录所有过去的消息(例如last 20),但如果代码运行良好,我希望从信息级别记录,以清除日志文件中不必要的日志消息
例如:
public void m( String arg ){
log.trace( "arg value: " + arg );
log.info( "Hi Bob!" );
try{
//code
}catch( Exception e ){
log.error( "error msg", e );
}
}
我想进入日志,比如:
*INFO* Hi Bob!
但如果发生了错误,我想在日志中输入如下内容:
*TRACE* arg value: test
*INFO* Hi Bob!
*ERROR* error msg //and stacktrace
换句话说,我希望有一个日志消息缓冲区,如果代码运行良好,它将从低级消息中清除,并在出错时推入日志文件。 java日志框架能从盒子里做到这一点吗
# 1 楼答案
更新 说没有办法做到这一点是不正确的。看看log4j
MappedDiagnosticContext
,this似乎是一个很好的说明没有办法做到这一点
考虑当前跟踪级别为^ {< CD2>},代码执行以下日志调用:
在
#1
没有办法知道代码将在ERROR
下游结束,所以唯一的解决方案是缓冲它。然后在#2
需要进行日志记录,因为当前级别为INFO
在
#3
发生错误时,#2
的信息日志已经发生。无法将其回滚并在#2
之前插入#1
跟踪不在
#2
登录并等待方法/函数执行完成通常是个坏主意。它可能对你有用,但你可能最终会丢失日志行,这很糟糕最好的选择是在内存中存储本地附加信息,以便在出错时登录。因此,输出将是:
日志记录的一大开销是构造从对象写入的字符串。因此,不需要缓冲实际字符串,而是需要放置一些
Callable
之类的字符串。一切都变得一团糟