使用HTML自定义格式的Log4j.properties进行日志记录

时间:2013-03-05 20:35:44

标签: java logging log4j

我需要帮助编辑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

这会创建一个这样的日志文件 enter image description here

我对如何更改输出格式感到困惑。

我希望Time列以HH:mm:ss.S格式显示时间戳,我不想要Thread列,

另外如果可能的话,我想将类别重命名为classpath。

请帮忙,我应该如何修改我的Log4j.properties文件以完成上述工作

3 个答案:

答案 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);
 ...