2

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

这会创建一个像这样的日志文件 在此处输入图像描述

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

我希望时间列以 HH:mm:ss.S 格式显示时间戳,我不希望线程列,

另外,如果可能的话,我想将类别重命名为类路径之类的名称。

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

4

3 回答 3

4

您只能更改以下选项org.apache.log4j.HTMLLayout

log4j.appender.FILE.layout.Title=HTML Layout Demo
log4j.appender.FILE.layout.LocationInfo=true

顺便说一句,您可以扩展此类覆盖方法

public String format(LoggingEvent)
public String getHeader()

第一种方法获取每个事件的 HTML 代码(例如表中的新行)。第二种方法获取标题的 HTML (从DOCTYPE声明到表标题行,例如<thead>...</thead><tbody>)。

于 2013-03-05T20:47:29.527 回答
0

您需要使用指定您首选布局的自定义模式将您的 HTML 布局替换为模式布局。

于 2013-03-05T20:48:38.387 回答
0

就像 Paul Vargas 建议的那样,您需要构建一个自定义布局来扩展org.apache.log4j.HTMLLayout.

查看HTMLLayout 的代码,您会在format方法内部看到 time 列不允许任何格式设置:

 ...
 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);
 ...
于 2013-04-15T10:30:24.550 回答