0

警告: 私は log4j のログ記録と一般的なログ記録に慣れていないため、無知であることをお詫びします。

.jar からプログラムを実行すると、プログラムが実行されたディレクトリに "jackrabbit.log_IS_UNDEFINED" ファイルが作成されます。このログ ファイルは非常に大きく (300MB 以上)、ドライブがいっぱいになります。このファイルには、使用しているいくつかの異なるライブラリからの DEBUG レベルのログが含まれていることがわかります。この「jackrabbit.log_IS_UNDEFINED」ファイルを削除し、ERROR レベル以上のログのみを別のドライブの自分のファイルに記録したいと考えています。例えば。(/smb01/Aggregator.log)。どんな助けでも歓迎です。

また、コマンド ラインから jar を実行すると、Log4j エラーが発生します。

log4j:ERROR Root level cannot be inherited. Ignoring directive.

独自のエラーをログに記録できるように、独自の構成ファイルを指定したい/指定する必要があります。
この構成ファイルを継承しました。Log4j.xml 構成ファイル:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- Appender Types: 
    <ConsoleAppender> org.apache.log4j.ConsoleAppender</ConsoleAppender> 
    <FileAppender> org.apache.log4j.FileAppender</FileAppender>
    <JDBCAppender> org.apache.log4j.jdbc.JDBCAppender</JDBCAppender>
    <AsyncAppender> org.apache.log4j.AsyncAppender</AsyncAppender> 
    <JMSAppender> org.apache.log4j.net.JMSAppender</JMSAppender>
    <LF5Appender> org.apache.log4j.lf5.LF5Appender</LF5Appender>
    <NTEventLogAppender> org.apache.log4j.nt.NTEventLogAppender</NTEventLogAppender> 
    <NullAppender> org.apache.log4j.varia.NullAppender</NullAppender>
    <SMTPAppender> org.apache.log4j.net.SMTPAppender</SMTPAppender>
    <SocketAppender> org.apache.log4j.net.SocketAppender</SocketAppender> 
    <SocketHubAppender> org.apache.log4j.net.SocketHubAppender</SocketHubAppender> 
    <SyslogAppender> org.apache.log4j.net.SyslogAppender</SyslogAppender>
    <TelnetAppender> org.apache.log4j.net.TelnetAppender</TelnetAppender>
    <WriterAppender> org.apache.log4j.WriterAppender</WriterAppender> -->
<!-- (all|debug|info|warn|error|fatal|off|null) "null" -->

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
    debug="false" threshold="fatal">

    <!-- Appenders -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="FA" class="org.apache.log4j.FileAppender">
        <param name="File" value="sample.log" />
        <param name="Threshold" value="WARN" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" />
        </layout>
    </appender>

    <appender name="ROLL" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="/smb01/Aggregator.log" /> <!-- The active file to log to -->
        <param name="encoding" value="UTF-8"/>
        <param name="append" value="true" />
        <param name="Threshold" value="WARN" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}|%5p|%t| %c{1} | %m%n"/>
        </layout>
    </appender>

    <appender name="CustomerReport" class="org.apache.log4j.FileAppender">
        <param name="file" value="CustomerReport.csv" />
        <param name="append" value="FALSE" />
        <param name="Threshold" value="INFO" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
    </appender>

    <appender name="rootAppender" class="org.apache.log4j.varia.NullAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%-5p] %c{1} - %m%n" />
        </layout>
    </appender>


    <!-- Loggers -->
    <!-- Standard Levels: DEBUG < INFO < WARN < ERROR < FATAL -->
    <logger name="com.group">
        <level value="info" />
        <appender-ref ref="console" />
        <appender-ref ref="ROLL" />
    </logger>

    <logger name="com.group.main">
        <level value="info" />
        <appender-ref ref="console" />
        <appender-ref ref="ROLL" />
    </logger>

    <logger name="com.group.customerLogger">
        <level value="info"/>
        <appender-ref ref="CustomerReport"/>
    </logger>

    <!-- Root Logger -->
    <root>
        <level value="FATAL"/>
        <appender-ref ref="rootAppender"/>
    </root>

</log4j:configuration>

これは私の仕事のためなので、すべてのコードを共有することはできませんが、重要な部分は次のとおりです。

import org.apache.log4j.xml.DOMConfigurator;
import org.apache.log4j.*;
import org.apache.log4j.Logger;

public class Main {
  public static Logger logger = Logger.getLogger("com.group.main");

  public static void main(String[] args) {

    // setup the log4j system so we can log stuff.
    org.apache.log4j.extras.DOMConfigurator.configure(args[1]);
    .
    .
    logger.debug("debug message!");
    .
    .
    .
  }

ファイルAggregator.logCustomerReport.csvdo は本来あるべき場所に表示されますが、何もログに記録/書き込まれません。「jackrabbit.log_IS_UNDEFINED」ファイルを見ることができましたが、そこにはすべてのログが含まれています。

私が使用しているlog4jを扱う​​ライブラリ(ビルドパスの順序でリストされています):

  • log4j-1.2.17.jar
  • apache-log4j-extras-1.1.jar
  • jackrabbit-standalone-2.2.10.jar

より詳しい情報

犯人と思われる別の xml ファイルを見つけました: logback.xml

<configuration>
    <appender name="jackrabbit" class="ch.qos.logback.core.FileAppender">
        <file>${jackrabbit.log}</file>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="jetty" class="ch.qos.logback.core.FileAppender">
        <file>${jetty.log}</file>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n
            </pattern>
        </encoder>
    </appender>


    <logger name="org.mortbay.log" level="${log.level}" additivity="false">
        <appender-ref ref="jetty"/>
    </logger>

    <root level="${log.level}">
        <appender-ref ref="jackrabbit"/>
    </root>
</configuration>

このファイルを (編集/削除/回避) できますか?

4

2 に答える 2

1

エラーを完全に排除したjackrabbit-standalone-2.2.10.jarを使用しないことになりました。代わりに、CQ 5.4 に含まれる他のさまざまなライブラリから特定のクラスのみをインポートしました。jackrabbit-standalone-2.2.10.jar を除いて、上記と同じセットアップが残っています。@TedTrippin、お時間とご配慮ありがとうございます。

于 2012-10-17T04:52:10.427 に答える
0

log4j 設定ファイルを渡すということですか? log4j.xml がクラスパスにある限り、Log4j は構成自体を取得する必要があります。であることを確認して、これを削除します。

org.apache.log4j.extras.DOMConfigurator.configure(args[1]);

その後、再試行してください。

ジャックラビットについての言及がないため、貼り付けた設定が原因のようには見えません。別の構成が他の場所から取得されているのだろうか?

于 2012-06-19T13:15:41.087 に答える