如何在log4j2中更改htmllayout

时间:2014-12-22 10:23:18

标签: log4j2

当我使用log4j时,我可以创建一个新的类扩展org.apache.log4j.HTMLLayout并覆盖它以生成新的日志格式。使用log4j2时,我只能使用布局但不能覆盖它。在我写的log4j2.xml中

   <Appenders>  
     <File name="log" fileName="D:\log.html" append="false">    
      <HTMLLayout/>    
    </File>  
  </Appenders>
log4j中的

我可以使用layout class =&#34; log.FormatHTMLLayout&#34; (log.FormatHTMLLayout是我的新类,它扩展了HTMLLayout),但现在我只能使用HTMLLayout。 有没有办法覆盖HTMLayout?我需要做很多事情,比如更改输出表,标题等等。

1 个答案:

答案 0 :(得分:2)

这是我做的, 我需要添加&lt; img&gt; log4j2生成的日志中的HTML标记以及默认的HTML元素(如&lt;,&gt;,“)将替换为转义字符,例如lt;,gt;,quot;。 (参考:https://issues.apache.org/jira/browse/LOG4J2-439

所以我只是从源代码复制了整个HTMLLayout类,可以在 log4j-core / src / main / java / org / apache / logging / log4j / core / layout

并将其名称更改为“CustomHTMLLayout”并在需要时更新它(您可以选择任何名称),现在您的自定义布局类与HTMLLayout类一样好。

有一种名为 toSerializable 的方法,其中包含每条记录的实际格式,因此您可以根据需要对其进行操作。

修改类后,您需要在log4j2.html中提供新的布局 如下:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration packages="com.redknee.bssauto.helpers"> 
<Appenders> 
<RollingFile name="Rolling-default" fileName="logs/bssauto.html" filePattern="logs/$${date:yyyy-MM}/bssauto-%d{MM-dd-yyyy}-%i.log.gz">
<CustomHTMLLayout charset="UTF-8" title="BSSAuto Logs" locationInfo="true" />
 <Policies>
   <TimeBasedTriggeringPolicy />
   <SizeBasedTriggeringPolicy size="10 MB" />
 </Policies>
</RollingFile>      
</Appenders> 
<Loggers> 
<Root level="trace"> 
  <AppenderRef ref="Rolling-default"/>
</Root> 
</Loggers> 
</Configuration>

请注意以下

<Configuration packages="com.bssauto.helpers">

这里的包应该包含所有包含布局自定义类的包。所以这里 com.bssauto.helpers ,其中我有CustomHTMLLayout类。

<CustomHTMLLayout charset="UTF-8" title="BSSAuto Logs" locationInfo="true" />
通过扩展AbstractStringLayout

创建

CustomHTMLLayout 自定义布局类

确保您使用的是最新的log4j2版本,我使用 log4j 2.2