将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 (将#修改为@)