Java 如何使用log4j.properties中的Marker来过滤一些日志?
我在程序中使用它,但是如何在log4j.properties中过滤此日志Java 如何使用log4j.properties中的Marker来过滤一些日志?,java,logging,Java,Logging,我在程序中使用它,但是如何在log4j.properties中过滤此日志 Marker marker = MarkerFactory.getMarker("tp-count"); log.info(marker, "The num of tp is {}", 10); log4j.properties如下所示: log4j.rootLogger=info,F log4j.appender.F=org.apache.log4j.RollingFileAppender log4j.appender
Marker marker = MarkerFactory.getMarker("tp-count");
log.info(marker, "The num of tp is {}", 10);
log4j.properties如下所示:
log4j.rootLogger=info,F
log4j.appender.F=org.apache.log4j.RollingFileAppender
log4j.appender.F.File=client.log
log4j.appender.F.MaxBackupIndex=10
log4j.appender.F.MaxFileSize=100MB
log4j.appender.F.layout=org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern=[%d] %p %m (%c)%n
假设您使用的是log4j 2.0,您可以使用
MarkerFilter
过滤日志,如中所述
另外请注意,您需要从属性
配置切换到xml
配置,以便启用过滤器支持。您无法使用properties
方法实现过滤
您可以使用它将属性快速转换为xml。请参阅手册,确保正确放置和命名了log4j2.xml,以便应用程序自动拾取它
您的最终log4j2.xml可能如下例所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="F" class="org.apache.log4j.RollingFileAppender">
<!-- below forces inclusion of only log events with marker 'tp-count' to this client.log-->
<MarkerFilter marker="tp-count" onMatch="ACCEPT" onMismatch="DENY"/>
<param name="File" value="client.log"/>
<param name="MaxBackupIndex" value="10"/>
<param name="MaxFileSize" value="100MB"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d] %p %m (%c)%n"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="F"/>
</root>
</log4j:configuration>
假设您使用的是log4j 2.0,您可以使用
MarkerFilter
过滤日志,如中所述
另外请注意,您需要从属性
配置切换到xml
配置,以便启用过滤器支持。您无法使用properties
方法实现过滤
您可以使用它将属性快速转换为xml。请参阅手册,确保正确放置和命名了log4j2.xml,以便应用程序自动拾取它
您的最终log4j2.xml可能如下例所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="F" class="org.apache.log4j.RollingFileAppender">
<!-- below forces inclusion of only log events with marker 'tp-count' to this client.log-->
<MarkerFilter marker="tp-count" onMatch="ACCEPT" onMismatch="DENY"/>
<param name="File" value="client.log"/>
<param name="MaxBackupIndex" value="10"/>
<param name="MaxFileSize" value="100MB"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d] %p %m (%c)%n"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="F"/>
</root>
</log4j:configuration>
问题是关于通过属性文件与配置结合使用。我将为log4j2版本2.11负责。举个例子 示例项目文件: log4j2.属性
status = error
appender.ana_whitespace.type = RollingFile
appender.ana_whitespace.name = ana_whitespace
appender.ana_whitespace.fileName = ${sys:es.logs.base_path:-target}${sys:file.separator}ana_whitespace.log
appender.ana_whitespace.filter.1.type = MarkerFilter
appender.ana_whitespace.filter.1.onMismatch=DENY
appender.ana_whitespace.filter.1.onMatch=ACCEPT
appender.ana_whitespace.filter.1.marker=ANA_WHITESPACE
appender.ana_whitespace.policies.type = Policies
appender.ana_whitespace.policies.time.type = TimeBasedTriggeringPolicy
appender.ana_whitespace.policies.time.interval = 1
appender.ana_whitespace.policies.time.modulate = true
rootLogger.level = info
rootLogger.appenderRef.ana_whitespace.ref = ana_whitespace
示例Java代码
package de.es.stemmer;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import org.apache.http.client.ClientProtocolException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.message.ObjectMessage;
public class JsonLoggerTest {
final static Logger log = LogManager.getLogger(JsonLoggerTest.class);
final static Marker MARKER_WHITESPACE = MarkerManager.getMarker("ANA_WHITESPACE");
public static void main(String[] args) throws ClientProtocolException, IOException {
System.setProperty("es.logs.base_path", "target");
LoggerContext.getContext().reconfigure();
log.info(MARKER_WHITESPACE, "msg_sourceSnippet whitespace");
}
}
问题是如何通过属性文件与配置结合使用。我将为log4j2版本2.11负责。举个例子 示例项目文件: log4j2.属性
status = error
appender.ana_whitespace.type = RollingFile
appender.ana_whitespace.name = ana_whitespace
appender.ana_whitespace.fileName = ${sys:es.logs.base_path:-target}${sys:file.separator}ana_whitespace.log
appender.ana_whitespace.filter.1.type = MarkerFilter
appender.ana_whitespace.filter.1.onMismatch=DENY
appender.ana_whitespace.filter.1.onMatch=ACCEPT
appender.ana_whitespace.filter.1.marker=ANA_WHITESPACE
appender.ana_whitespace.policies.type = Policies
appender.ana_whitespace.policies.time.type = TimeBasedTriggeringPolicy
appender.ana_whitespace.policies.time.interval = 1
appender.ana_whitespace.policies.time.modulate = true
rootLogger.level = info
rootLogger.appenderRef.ana_whitespace.ref = ana_whitespace
示例Java代码
package de.es.stemmer;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import org.apache.http.client.ClientProtocolException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.message.ObjectMessage;
public class JsonLoggerTest {
final static Logger log = LogManager.getLogger(JsonLoggerTest.class);
final static Marker MARKER_WHITESPACE = MarkerManager.getMarker("ANA_WHITESPACE");
public static void main(String[] args) throws ClientProtocolException, IOException {
System.setProperty("es.logs.base_path", "target");
LoggerContext.getContext().reconfigure();
log.info(MARKER_WHITESPACE, "msg_sourceSnippet whitespace");
}
}
log4j2.properties确实支持过滤器!例如,请参见中的示例:log4j2.properties确实支持过滤器!例如,参见中的示例: