Java 服务端架构
Spring、Netty、日志框架与工程化实战
🎨 视觉封面log4j自定义appender实现,处理异常堆栈
在项目中需要自定义实现一个log4j的appender。根据log中MDC里的信息,构造日志存储的目录结构。自定义实现log4j appender的方法已经介绍过了。主要是覆盖AppenderSkeleton中的appender方法。
@Override
protected void append(LoggingEvent event) {
this .logEvent = event;
}
日志内容的获取和格式处理,通过Layout进行格式化
this .getLayout().format(event).getBytes( DEFAULT_CS )
这里有个问题,一般情况下,我们常用的org.apache.log4j.PatternLayout是不会处理异常堆栈的。因为,其内部的方法,返回的是true。
public boolean ignoresThrowable () {
return true ;
}
在这种情况,如果你的日志里有异常对象,如logger.error("错误信息。", e) 那么e将会被忽略。这时候需要我们自己处理。处理方式如下:
if (layout .ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if (s != null ) {
int len = s. length;
for( int i = 0; i < len; i++) {
// 处理异常堆栈,比如记录到日志文件中
}
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
slf4j+log4j2 控制台输出错误解决
<blockquote <p SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See <uhttp:...
log4j 多classloader重复加载配置问题解决
<p 最近<a href="http://www.coderli.com"OneCoder</a在开发隔离任务运行的沙箱,用于隔离用户不同任务间以及任务和框架本身运行代码的隔离和解决潜在的jar包冲突问题。<br / <!--break-- 运行发现,隔离的任务正常运行,但是却没有任何日志记录。从控制台可看到如下错误信...
log4j 和 java.lang.OutOfMemoryError PermGen space
<p 还是<a href="http://www.coderli.com"OneCoder</a在项目中沙箱的问题,用classloader隔离做的沙箱,反复运行用户的任务,出现永生区内存溢出:<br / java.lang.OutOfMemoryError: PermGen space</p <p 这个问题在tomc...
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com