如何解决将Java Appender配置链接到Java Logger类
我有一个系统,其中当前审核日志是通过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 举报,一经查实,本站将立刻删除。