我需要帮助编辑Apache Log4j文件的输出。 我使用html布局来保存创建的日志。这是我的log4j.properties代码:
log4j.rootLogger = DEBUG, FILEALL, FILEMAIN
log4j.appender.FILEMAIN=org.apache.log4j.FileAppender
log4j.appender.FILEMAIN.File=${logfileall.name}
log4j.appender.FILEMAIN.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILEMAIN.Threshold=DEBUG
log4j.appender.FILEALL=org.apache.log4j.FileAppender
log4j.appender.FILEALL.File=${logfilemain.name}
log4j.appender.FILEALL.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILEALL.Threshold=WARN
这会创建一个这样的日志文件
我对如何更改输出格式感到困惑。
我希望Time列以HH:mm:ss.S格式显示时间戳,我不想要Thread列,
另外如果可能的话,我想将类别重命名为classpath。
请帮忙,我应该如何修改我的Log4j.properties文件以完成上述工作
答案 0 :(得分:4)
您只能更改org.apache.log4j.HTMLLayout
的以下选项:
log4j.appender.FILE.layout.Title=HTML Layout Demo
log4j.appender.FILE.layout.LocationInfo=true
顺便说一句,您可以扩展此class并覆盖方法
public String format(LoggingEvent)
public String getHeader()
第一种方法获取每个事件的HTML代码(例如表中的新行)。第二种方法获取标题的HTML(从DOCTYPE
声明到表标题行,例如<thead>...</thead><tbody>
)。
答案 1 :(得分:0)
您需要使用指定首选布局的自定义图案替换HTML布局。
答案 2 :(得分:0)
就像Paul Vargas建议的那样,您需要构建一个扩展org.apache.log4j.HTMLLayout
。
查看code of the HTMLLayout内部,您会在format
方法中看到时间列不允许任何格式化:
...
sbuf.append("<td>");
sbuf.append(event.timeStamp - LoggingEvent.getStartTime());
sbuf.append("</td>" + Layout.LINE_SEP);
线程的格式化是这样完成的:
...
String escapedThread = Transform.escapeTags(event.getThreadName());
sbuf.append("<td title=\"" + escapedThread + " thread\">");
sbuf.append(escapedThread);
sbuf.append("</td>" + Layout.LINE_SEP);
...