0

私は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 と DBUG も DB に移動します。

DEBUG ではなく、INFO レベル (およびそれ以上) のイベントを DB に送信したいと考えています。どうやってするか?

4

1 に答える 1

1

(ロガーではなく) アペンダーにしきい値を設定できます。例えば:

<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編集:ロガーとルートロガーの両方にアペンダーを設定する必要もありません。これが、重複したエントリがある理由です。これらは追加として扱われるためです (つまり、 のレベルではcom.mycompany、基本的に 2 つの DB アペンダがあります)。

ルートに DBAppender を設定し、com.mycompanyロガーから削除するだけです。

于 2012-12-05T09:38:26.887 に答える