我有 com.mycompany.library。 *
我想DEBUG转到控制台,INFO转到DB。我怎么能实现它? 这是我的log4j.xml
的一部分<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false"
xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- APPENDERS LIST -->
<!-- show log entries on console -->
<appender name="ConsoleApp" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} [%-5p][%-16.16t][%32.32c] - %m%n" />
</layout>
</appender>
<appender name="DBAppender" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:postgresql://localhost:5432/myDB" />
<param name="driver" value="org.postgresql.Driver" />
<param name="user" value="postgres" />
<param name="password" value="password" />
<param name="sql"
value="INSERT INTO logs(user_id, dated,logger,lev,message) VALUES('%t', '%d{yyyy-MM-dd HH:mm:ss}','%-50c{3}','%p','%m')" />
</appender>
<logger name="com.mycompany">
<level value="INFO" />
<appender-ref ref="DBAppender" />
</logger>
<logger name="com.mycompany.library">
<level value="DEBUG" />
<appender-ref ref="ConsoleApp" />
</logger>
<root>
<priority value="ERROR" />
<appender-ref ref="DBAppender" />
</root>
</log4j:configuration>
使用此配置: INFO和DEBUG进入控制台。但是,带有双重条目的INFO和DUBUG也会转到DB。
我希望DB将事件发送到INFO级别(和更高级别),而不是DEBUG。怎么做?
答案 0 :(得分:1)
您可以在appender上设置阈值(而不是在记录器上)。例如:
<appender name="std-out" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">...</layout>
<param name="Threshold" value="info"/>
</appender>
请参阅http://wiki.apache.org/logging-log4j/LogByLevel
编辑:您也不必在com.mycompany
记录器和根记录器上都设置一个appender。这就是为什么你有重复的条目,因为它们被视为添加(因此在com.mycompany
级别,你基本上有2个DB appender)。
只需在root用户上设置DBAppender,然后将其从com.mycompany
记录器中删除。