私はログバックを使用していますが、ログファイル名をプログラム内でJavaプログラム( ログバックアペンダーパスをプログラムで設定 )と同様)に設定しようとしています。そのソリューションを次のように適合させます。
Logback-test.xmlで:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>log/${log_file_name}.log</file>
...
そして再び私のJavaプログラムで:
String logFileName = "" + System.currentTimeMillis(); // just for example
System.setProperty("log_file_name", logFileName);
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
ContextInitializer ci = new ContextInitializer(lc);
lc.reset();
try
{
// I prefer autoConfig() over JoranConfigurator.doConfigure() so I
// wouldn't need to find the file myself.
ci.autoConfig();
}
catch (JoranException e)
{
// StatusPrinter will try to log this
e.printStackTrace();
}
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
ただし、結果は2つのログになります。1つは完全で、名前は「1319041145343.log」のように、もう1つは空で「log_file_name_IS_UNDEFINED.log」という名前になります。この他の空のログファイルの作成を停止するにはどうすればよいですか?
これらの余分なファイルの作成を無視するためにできることは次のとおりです。以下は設定ファイルです
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!-- "application-name" is a variable -->
<File>c:/logs/${application-name}.log</File>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d %p %t %c - %m%n</Pattern>
</layout>
</appender>
<root level="debug">
<appender-ref ref="FILE"/>
</root>
</configuration>
Java部分、
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
JoranConfigurator jc = new JoranConfigurator();
jc.setContext(context);
context.reset(); // override default configuration
// inject the name of the current application as "application-name"
// property of the LoggerContext
context.putProperty("application-name", NAME_OF_CURRENT_APPLICATION);
jc.doConfigure("/path/to/the/above/configuration/file.xml");
ここから入手しました http://logback.qos.ch/faq.html#sharedConfiguration
ロガーが2回初期化されるようです。初めて、おそらくアプリが読み込まれ、${log_file_name}
を解決できなかったとき。 -Dlog_file_name=*something*
でアプリを起動する場合、*something*
という名前の別のログファイルを作成すると、この動作を確認できます。