我想使用logback MDC功能作为我的日志名称,但我在文件名中得到%PARSER_ERROR[X]
。也许不可能为日志文件指定名称。在我的日志文件模式参数传递没有问题。
任何帮助将不胜感激。
这是我的logback.xml文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds">
<jmxConfigurator />
<property scope="context" name="PATH_TO_LOGS" value="${catalina.base}/logs" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${PATH_TO_LOGS}/app.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${PATH_TO_LOGS}/%X{myDefinedName}.app.%i.log</fileNamePattern>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{ISO8601} %-5level [%thread] %logger{36} - [%X{myDefinedName}] - %msg%n</pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="FILE"/>
</root>
</configuration>
编辑:这是我的过滤器
private static final String NAME_TO_PASS = "myDefinedName";
private String getParameter(ServletRequest request) {
HttpServletRequest req = (HttpServletRequest) request;
String parameter = req.getParameter(NAME_TO_PASS);
HttpSession session = req.getSession();
if(parameter != null) {
session.setAttribute(NAME_TO_PASS, parameter);
} else {
parameter = (String)session.getAttribute(NAME_TO_PASS);
}
return parameter;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
MDC.put(NAME_TO_PASS, getParameter(request));
chain.doFilter(request, response);
} finally {
MDC.remove(NAME_TO_PASS);
}
}
@Override
public void destroy() {
}
在某处,我读到我应该使用${myDefinedName}
模式而不是%X{myDefinedName}
,但我无法正确检查,因为在没有MDC参数的应用部署过程中创建了日志。如何在MCD参数传递时开始记录?
答案 0 :(得分:4)
在官方示例中使用了SiftingAppender,它可以正常工作:http://logback.qos.ch/manual/appenders.html#SiftingAppender
<configuration>
<appender name="FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
<!-- in the absence of the class attribute, it is assumed that the
desired discriminator type is
ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
<discriminator>
<key>myDefinedName</key>
<defaultValue>unknown</defaultValue>
</discriminator>
<sift>
<appender name="FILE-${myDefinedName}" class="ch.qos.logback.core.FileAppender">
<file>${myDefinedName}.log</file>
<append>false</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</pattern>
</layout>
</appender>
</sift>
</appender>
<root level="WARN">
<appender-ref ref="FILE" />
</root>
</configuration>
如果该MDC值为null,则将defaultValue用作日志名称的区分值。