Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用log4j.properties中的Marker来过滤一些日志?_Java_Logging - Fatal编程技术网

Java 如何使用log4j.properties中的Marker来过滤一些日志?

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

我在程序中使用它,但是如何在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.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确实支持过滤器!例如,参见中的示例: