Logbackですぐにログファイルのパスを変更するにはどうすればよいですか?Logbackで即時にログファイルパスのプロパティを変更する
私のウェブアプリケーションのユーザは、いくつかの電子メールの添付ファイルが保存され処理される場所を変更することができます。ユーザーはこのパスにアクセスし、処理後に何らかのエラーが発生したかどうかを確認できます。このパスにログファイルを作成します。これを実現するために、私はこのLogbackの設定使用を試してみた:あなたが見ることができると同様
<configuration debug="true" scan="true" scanPeriod="30 seconds">
<property scope="context" resource="com/hrgi/configuracoes/recuperadorNFe.properties" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{dd/MM/yyyy;HH:mm:ss} [%thread] %-5level %logger - %msg%n %ex{full}</pattern>
</encoder>
</appender>
<appender name="importador" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${recuperadorNFe.diretorioDeArmazenamento}/logs/importador.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${recuperadorNFe.diretorioDeArmazenamento}/logs/%d{yyyy/MM}/importador-%d{dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>(%date{dd/MM/yyyy;HH:mm:ss} [%-5level]) -> %msg%n %nopex</pattern>
</encoder>
</appender>
<logger name="com.hrgi.nfe" level="info">
<appender-ref ref="importador" />
</logger>
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>
、私の希望はので、おそらくそれは、プロパティファイルの内容が変更されたことを確認し、正しい値をロードすることができ、再起動ロガーコンテキストました。動作しません:
private void restartLogContext(){
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.stop();
loggerContext.start();
StatusPrinter.print(loggerContext);
}
私はロガーアペンダーを削除して新しいものを作成しようとしました。少なくとも、ログファイルは新しいパスで作成されましたが、ログはコンソールに起こっている:
private void restartLog(){
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger logbackLogger = loggerContext.getLogger("com.hrgi.nfe");
logbackLogger.detachAndStopAllAppenders();
TimeBasedRollingPolicy policy= new TimeBasedRollingPolicy();
policy.setContext(loggerContext);
policy.setFileNamePattern(modeloPopup.getConfiguracoes().getDiretorioDeArmazenamento()+"/logs/%d{yyyy/MM}/importador-%d{dd}.log");
RollingFileAppender fileAppender = new RollingFileAppender();
fileAppender.setContext(loggerContext);
fileAppender.setName("importador");
fileAppender.setFile(modeloPopup.getConfiguracoes().getDiretorioDeArmazenamento()+"/logs/importador.log");
fileAppender.setRollingPolicy(policy);
policy.setParent(fileAppender);
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(loggerContext);
encoder.setPattern("(%date{dd MMM yyyy;HH:mm:ss} [%-5level]) -> %msg%n %nopex");
encoder.start();
fileAppender.setEncoder(encoder);
fileAppender.start();
logbackLogger.addAppender(fileAppender);
StatusPrinter.print(loggerContext);
}
誰かが私が間違ってやっているものを私に説明してもらえますか?
私はTimeBasedRollingPolicyを拡張し、ロールオーバーとisTriggeringEventを上書きしました。これでログファイルのパスをdinamically変更することができます。 – brevleq