0

私のアプリケーションでは、入力ファイル (myFile1.txt など) を読み込み、同じ名前の出力ファイル (myFile2log など) を作成します。ポイントは、inputfile が Java アプリケーション内で読み取られ、コマンド ライン パラメータとして指定されないことです。したがって、アプリケーションでアペンダーを設定する必要があります。

public class Example {
private static final Logger LOG = Logger.getLogger(Example.class);

public Example() throws IOException {
    FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
            PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log",
            "'.'yyyy-MM-dd");
    LOG.addAppender(appender);
    LOG.setLevel((Level) Level.DEBUG);
    LOG.debug("blabla");

    new RandomClass();
}

public static void main(String[] args) throws IOException {
    new Example();
}
}

public class RandomClass {
private static final Logger LOG = Logger.getLogger(RandomClass.class);

public RandomClass() {
    LOG.debug("hello Randomclass");
}
}

そして、ここに問題があります。上記を実行すると、カスタム ファイル アペンダーは、fileappender が定義された特定のクラスに対してのみ機能しますが、他のクラスでは機能しません。したがって、「RandomClass」の出力はこのログファイルに書き込まれませんが、必要なものです。どうすればそれを達成できますか?

4

2 に答える 2

1

アペンダーを動的に設定したい場合は、新しいアペンダーをルートロガーに設定してみてください。

Logger logger = Logger.getRootLogger();
FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
   PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log", "'.'yyyy-MM-dd");
logger.addAppender(appender)
于 2012-11-16T12:33:20.683 に答える
1

クラスパスでlog4j.propertiesファイルを使用すると、すべてのクラスでロガーを初期化できます。

private static final Logger LOG = Logger.getLogger(Example.class);

およびアペンダーはすべてコンストラクターでは必要ありません。プロパティファイルに含まれている必要があります

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=yourfilename.log
log4j.appender.R.MaxFileSize=2048KB
于 2012-11-16T12:30:13.020 に答える