Java 使用 log4j2.xml 的 Apache Log4j2 包特定日志记录

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38713575/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 20:33:13  来源:igfitidea点击:

Apache Log4j2 package specific logging using log4j2.xml

javalog4j2

提问by Rajas

I am using log4j2. But the problem that I am facing is that it logs all logs. I want to ... log from specific package to a specific file & other package to another file. I am using log4j2.xml for configuration. Please can someone help?

我正在使用 log4j2。但我面临的问题是它记录了所有日志。我想...从特定包登录到特定文件和其他包到另一个文件。我正在使用 log4j2.xml 进行配置。请问有人可以帮忙吗?

log4j2.xml

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>

<Loggers>
    <Root level="DEBUG" additivity="false">
        <AppenderRef level="DEBUG" ref="CONSOLE" />
        <AppenderRef level="DEBUG" ref="fileAppender" />
    </Root>
    <Logger name="com.pkg.test.logging.method" level="DEBUG"
        additivity="false">
        <Appender-ref ref="fileAppender" level="DEBUG" />
    </Logger>

</Loggers>

<Appenders>

    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout
            pattern="%highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1}: %L - %msg%n%throwable}" />
    </Console>

    <RollingFile name="fileAppender" fileName="./log.log"
        filePattern="./log-%d{yyyy-MM-dd}.log">
        <PatternLayout
            pattern="%highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1}: %L - %msg%n}" />
        <Policies>
            <TimeBasedTriggeringPolicy interval="1"
                modulate="true" />
        </Policies>
    </RollingFile>
</Appenders>

采纳答案by Rajas

Just answered the question.

刚刚回答了这个问题。

log4j2.xml

log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
<Loggers>
    <Root level="DEBUG" additivity="false">
        <AppenderRef level="DEBUG" ref="CONSOLE" />
     </Root>
    <Logger name="com.pkg.test.logging.method" level="DEBUG"
        additivity="false">
        <Appender-ref ref="fileAppender" level="DEBUG" />
    </Logger>

</Loggers>

<Appenders>

    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout
            pattern="%highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1}: %L - %msg%n%throwable}" />
    </Console>

    <RollingFile name="fileAppender" fileName="./log.log"
        filePattern="./log-%d{yyyy-MM-dd}.log">
        <PatternLayout
            pattern="%highlight{[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1}: %L - %msg%n}" />
        <Policies>
            <TimeBasedTriggeringPolicy interval="1"
                modulate="true" />
        </Policies>
    </RollingFile>
</Appenders>

Removed the <AppenderRef level="DEBUG" ref="fileAppender" />from root logger. Thus it started logging logs based on packages.

<AppenderRef level="DEBUG" ref="fileAppender" />从根记录器中删除了。因此它开始基于包记录日志。

回答by CanB

From Log4J Manual:

Log4J 手册

Adding a specific logger for a class: (you can refer to packages here too)

为一个类添加一个特定的记录器:(你也可以在这里参考包)

<Logger name="org.apache.logging.log4j.test2" level="debug" additivity="false">
  <AppenderRef ref="File"/>
</Logger>

Adding a specific appender:

添加特定的appender:

<Appender type="File" name="File" fileName="${filename}">
  <Layout type="PatternLayout">
    <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
  </Layout>
</Appender>