13

log4jログファイルのパスとファイル名を動的に変更したい。

私はたくさんのページを読みましたが、ほぼすべてのページで、次のようなシステムプロパティを使用する必要があると言われています: log4jログファイルを動的に変更する方法は?

したがって、私のlog4j.propertiesファイルは次のようになります。

log4j.logger.JDBC_LOGGER=INFO,jdbcTests
log4j.additivity.JDBC_LOGGER = false

log4j.appender.jdbcTests=org.apache.log4j.FileAppender
log4j.appender.jdbcTests.File=${my.log}
log4j.appender.jdbcTests.layout=org.apache.log4j.PatternLayout
log4j.appender.jdbcTests.append = false
log4j.appender.jdbcTests.layout.ConversionPattern=%d{yyyy mm dd HH:mm:ss} %5p %C:Line %L - %m%n

私のメインメソッドでは、新しいシステムプロパティを設定します。

System.setProperty("{my.log", "C:/logfile.log");

しかし、エラーが発生します。

log4j:ERROR setFile(null,false) call failed.
java.io.FileNotFoundException: 
    at java.io.FileOutputStream.open(Native Method)....

そして、設定したシステムプロパティを次のように読み込もうとすると、次のようになります。

System.out.println(System.getProperty("my.log"));

nullを返します。私は何を間違えますか?

4

3 に答える 3

9

「{my.log」ではなく「my.log」を意味していると思います

System.setProperty("my.log", "C:/logfile.log");

ロギングが開始されたらこれを変更できるとは思わないので、プログラムのできるだけ早い段階でこれを設定する必要があります。

ところで:FileAppenderをサブクラス化して、好きなように動作させることができます。

于 2012-08-07T13:03:34.290 に答える
1

スペルミスがあります:「my.log」ではなく「{my.log」

于 2012-08-07T13:04:50.207 に答える
0

ロガーをインスタンス化する前にプロパティを設定するだけです。ロガー設定を初期化すると、プロパティは価値がなくなります。以下のように:

System.setProperty("my.log", "C:\\src\\com\\web\\automation\\logs\\Application.log");
PP_LOGS = Logger.getLogger("devpinoyLogger");
于 2013-08-27T10:08:20.407 に答える