2014-12-22 2 views
0

Когда я использую log4j, я могу создать новый класс, расширяет org.apache.log4j.HTMLLayout и переопределяет его, чтобы создать новый формат журнала. При использовании log4j2 я могу использовать только макет, но не переопределять его. В моей log4j2.xml написаниеКак изменить htmllayout в log4j2

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

в log4j я могу использовать класс макет = «log.FormatHTMLLayout» (log.FormatHTMLLayout мой новый класс, который расширяет HTMLLayout), но теперь я могу использовать только HTMLLayout. Есть ли способ переопределить HTMLayout? Мне нужно сделать много вещей, например, изменить таблицу вывода, заголовок и так далее.

ответ

2

Вот что я сделал, мне нужно добавить <IMG> HTML-теги в журналах, генерируемых log4j2 и по умолчанию элементы HTML, как <,>, "заменяются экранирующих символов, как л;, Гт, Quot; . (Ref: https://issues.apache.org/jira/browse/LOG4J2-439)

Так я просто скопировал весь класс HTMLLayout из источника, который доступен на log4j-ядро/SRC/главная/Java/орг/апач/регистрация/log4j/ядро ​​/ макет

и сменил название на "CustomH TMLLayout "и обновил его везде, где это необходимо (вы можете выбрать любое имя), теперь ваш собственный класс макета также хорош, как класс 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 is package, под которым у меня есть CustomHTMLLayout класс.

<CustomHTMLLayout charset="UTF-8" title="BSSAuto Logs" locationInfo="true" /> 

и CustomHTMLLayout является пользовательским класс макета создается путем расширения AbstractStringLayout

Убедитесь, что вы используете последнюю версию log4j2, я использовал log4j 2.2

Смежные вопросы