前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >细说log4j之log4j 2.x

细说log4j之log4j 2.x

作者头像
编程随笔
发布2019-09-11 15:34:57
7820
发布2019-09-11 15:34:57
举报
文章被收录于专栏:后端开发随笔

官网:https://logging.apache.org/log4j/2.x/

1. 主要组件:

从图中可以看出,log4j2中的主要组件为:FilterAppenderLogger,他们的层次关系为: Configuration -- Filter -- Appender - Layout -- Filter -- Logger -- Filter 2. log4j 2.x配置 log4j 2.x的配置文件格式和1.x的配置文件格式完全不同,需要特别注意。 log4j 2.x从2.4版本开始支持properties配置文件,名称必须为:log4j2.properties。但是,对于log4j 2.x的配置,建议使用xml格式:log4j2.xml,各个组件配置非常灵活。 log4j 2.x 配置框架: 简洁模式:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
  <!-- 定义属性 -->
  <Properties>
    <Property name="name1">value</property>
    <Property name="name2" value="value2"/>
  </Properties>

  <!-- 定义全局过滤器 -->
  <filter ... />

  <!-- 定义日志输出源 -->
  <Appenders>
    <appender ... >
      <filter  ... />
    </appender>
    ...
  </Appenders>
 
  <!-- 定义日志 -->
  <Loggers>
    <Logger name="name1">
      <filter  ... />
    </Logger>
    ...
    <Root level="level">
      <AppenderRef ref="name"/>
    </Root>
  </Loggers>
</Configuration>

严格模式:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
  <Properties>
    <Property name="name1">value</property>
    <Property name="name2" value="value2"/>
  </Properties>

  <Filter type="type" ... />
 
  <Appenders>
    <Appender type="type" name="name">
      <Filter type="type" ... />
    </Appender>
    ...
  </Appenders>

  <Loggers>
    <Logger name="name1">
      <Filter type="type" ... />
    </Logger>
    ...
    <Root level="level">
      <AppenderRef ref="name"/>
    </Root>
  </Loggers>
</Configuration>

3. 详细配置示例 分别以2种配置模式进行配置,如下:

简洁模式:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <!-- 简单模式配置log4j -->
    <!-- 输出源定义 -->
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    
    <!-- 日志 -->
    <Loggers>
        <!-- 特别指定包下的日志级别 -->
        <Logger name="org.chench.ttt" level="trace" additivity="false">
            <AppenderRef ref="Console" />
        </Logger>
    
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

严格模式:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!-- 使用严格模式配置log4j2 -->
<Configuration status="warn" strict="true" name="XMLConfigTest" packages="org.chench.test">
    <!-- 定义属性  -->
    <Properties>
        <Property name="fileName">target/test.log</Property>
    </Properties>
    
    <!-- 定义过滤器 -->
    <Filter type="ThresholdFilter" level="trace"/>
    
    <!-- 定义日志输出地 -->
    <Appenders>
        <!-- 输出到控制台 -->
        <Appender type="Console" name="STDOUT">
            <!-- <Layout type="PatternLayout" pattern="%m MDC%X%n"/> -->
            <Layout type="PatternLayout" pattern="%d [%t] %-5level %logger{36} - %msg%n"/>
            <!--
            <Filters>
                <Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL" />
                <Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
            </Filters>
            -->
        </Appender>
        
        <!-- 输出到控制台 -->
        <Appender type="Console" name="Flow">
            <Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/>
            <!--
            <Filters>
                <Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
                   <Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            -->
        </Appender>
        
        <!-- 输出到文件 -->
        <Appender type="File" name="File" fileName="${fileName}">
            <Layout type="PatternLayout">
                <!-- <Pattern>%d %p %C{1.} [%t] %m%n</Pattern> -->
                <!-- <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern> -->
                <Pattern>%d [%t] %-5level %logger{36} - %msg%n</Pattern>
            </Layout>
        </Appender>
        
        <!-- 输出到List -->
        <!-- <Appender type="List" name="List">
        </Appender> -->
    </Appenders>
    
    <!-- 具体日志组件 -->
    <Loggers>
        <!-- 定义org.chench.test.log4j包下的日志组件 -->
        <!-- 
        <Logger name="org.chench.test.log4j" level="debug" additivity="false">
            <Filter type="ThreadContextMapFilter">
                <KeyValuePair key="test" value="123"/>
            </Filter>
            <AppenderRef ref="STDOUT" />
        </Logger>
        -->
        
        <!-- 定义包org.chench.ttt下的日志组件 -->
        <!--
        <Logger name="org.chench.ttt" level="debug" additivity="false">
            <AppenderRef ref="File"/>
        </Logger>
        -->
        
        <Root level="trace">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="File" />
        </Root>
    </Loggers>
</Configuration>

4. 在Java中使用log4j2 log4j2中获取日志组件的方式与log4j1不同,以传递class对象为例说明:

代码语言:javascript
复制
log4j1: org.apache.log4j.Logger.getLogger(clazz)
log4j2: org.apache.logging.log4j.LogManager.getLogger(clazz)

代码片段:

代码语言:javascript
复制
public class LoggerTest {
    private static final Logger logger = LogManager.getLogger(LoggerTest.class);
    public static void main(String[] args) {
        logger.info(String.format("log4j2 logger test"));
    }
}

log4j2日志输出格式详见:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档