问题描述
我有一个系统,其中当前审核日志是通过xml配置进行配置的,并且具有AuditLogger类。当前场景:
xml配置
<appender name="audit" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<file>${logdir}/audit.log</file>
<encoder>
<pattern>%d{MMM dd HH:mm:ss} [%mdc{app}:%mdc{priority}]:%mdc{user}:%mdc{proto}:%mdc{label}:[%mdc{ipaddr}]:%mdc{intent}:%msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${logdir}/%d{yyyy-MM-dd}/audit.%i.gz</fileNamePattern>
<maxFileSize>17MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>100MB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- The Audit Log -->
<logger name="audit" additivity="false" level="ALL">
<appender-ref ref="audit"/>
</logger>
AuditLogger类
的一部分static final String AUDIT_LOGGER_NAME = "audit";
private final Logger backingLogger;
private AuditLogger() {
backingLogger = LoggerFactory.getLogger(AUDIT_LOGGER_NAME);
}
现在,我必须以编程方式配置日志,以便动态更改滚动策略。我已经删除了 xml配置,并为其添加了Java代码。
@Configuration
public class Auditinit {
public static final LoggerContext LOGGER_CONTEXT = (LoggerContext) LoggerFactory.getILoggerFactory();
@postconstruct
public void postconstruct() {
String pattern = "%d{MMM dd HH:mm:ss} [%mdc{app}:%mdc{priority}]:%mdc{user}:%mdc{proto}:%mdc{label}:[%mdc{ipaddr}]:%mdc{intent}:%msg%n";
RollingFileAppender rollingFileAppender = new RollingFileAppender();
rollingFileAppender.setEncoder(encoder(pattern));
rollingFileAppender.setContext(LOGGER_CONTEXT);
rollingFileAppender.setFile("audit.log");
rollingFileAppender.setName("audit");
rollingPolicyForAppender(
rollingFileAppender,"10 KB","50 KB",4
);
rollingFileAppender.start();
}
private static PatternLayoutEncoder encoder(String pattern) {
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setContext(LOGGER_CONTEXT);
encoder.setPattern(pattern);
encoder.start();
return encoder;
}
public static void rollingPolicyForAppender(RollingFileAppender rollingFileAppender,String maxFileSize,String totalSizeCap,int maxHistory) {
SizeAndTimeBasedRollingPolicy rollingPolicy = new SizeAndTimeBasedRollingPolicy();
rollingPolicy.setContext(LOGGER_CONTEXT);
rollingPolicy.setMaxHistory(maxHistory);
rollingPolicy.setMaxFileSize(FileSize.valueOf(maxFileSize));
rollingPolicy.setTotalSizeCap(FileSize.valueOf(totalSizeCap));
rollingPolicy.setFileNamePattern(rollingFileAppender.rawFileproperty() + ".%d{yyyy-MM-dd}.%i.gz");
rollingPolicy.setParent(rollingFileAppender);
rollingFileAppender.setRollingPolicy(rollingPolicy);
rollingPolicy.start();
}
}
这将在正确的位置创建audit.log文件,但是没有任何日志记录到该文件中。有人可以指出我在想什么吗? (我的直觉是我缺少Audit Log类和Audit Init类的链接,但是不确定如何做。)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)