官网: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 配置框架:
简洁模式:

<?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>

严格模式:

<?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种配置模式进行配置,如下:

简洁模式:

<?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>

严格模式:

<?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对象为例说明:

log4j1: org.apache.log4j.Logger.getLogger(clazz)
log4j2: org.apache.logging.log4j.LogManager.getLogger(clazz)

代码片段:

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

细说log4j之log4j 2.x的更多相关文章

  1. 细说log4j之log4j 1.x

    官网:http://logging.apache.org/log4j/1.2/manual.html 三大组件:loggers,appenders,layouts. LoggersLogger是一个层 ...

  2. log4j日志文件 log4j.xml log4j.properties配置

    1,导入log4j  jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...

  3. 【Log4j】 log4j.properties 使用

    一.参数意义说明 输出级别的种类 ERROR.WARN.INFO.DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如 ...

  4. Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较

    Log4j.Log4j 2.Logback.SFL4J.JUL.JCL的比较 之前就知道有好几种日志框架,但是一直都是听别人讲,在什么时候该用何种logger,哪种logger比较好……一直对Log4 ...

  5. Log4J:Log4J三大组件:Logger+Appender+Layout 格式化编程详解

    快速了解Log4J Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录     (如何处理日志) Appender:日志输出目的地,负责日志的输出  (输出到什么 地方) Layo ...

  6. Log4j – Configuring Log4j 2 - Log4j 2的配置

    Configuration Inserting log requests into the application code requires a fair amount of planning an ...

  7. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用

    log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n  ---internationalization  不就是i和n之间有18个字母... http://logging.a ...

  8. maven web项目配置log4j,及log4j参数设置

    本文为博主原创,转载须注明转载地址: 1.在maven项目中引入相关的依赖: 需要依赖的jar为: <!-- 配置日志 --> <dependency> <groupId ...

  9. Log4j:log4j.properties 配置解析

    Log4j 三个主要组件 Loggers(记录器):记录日志的工具,程序中就是用它来记录我们想要的日志信息. Appenders (输出源):日志输出到什么地方,可以是控制台.文件.流位置.数据库,等 ...

  10. Log4j介绍,log4j.properties配置详解

    http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html本文主要解释log4j的配置文件各个配置项的含义,内容是从网上转载的 1.Log ...

随机推荐

  1. Shell 字符截取命令 awk

    awk命令# awk '条件1{动作1} 条件2{动作2}….' 文件名一般使用关系表达式作为条件动作:1.格式化输出 2.流程控制语句 处理cut命令无法截取空格的列 例子:截取出磁盘使用率 df ...

  2. 在浏览器中浏览git上项目目录结构

    效果如下,参考:https://gitee.com/oschina/GitCodeTree

  3. angular2路由与express路由冲突的问题

    angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...

  4. webpack入门(四)webpack的api 2 module

    接着介绍webpack的module. module Options affecting the normal modules (NormalModuleFactory)  这些选项影响普通的模块 m ...

  5. ajax 执行成功 没有返回

    提交表单 或执行ajax 的按钮,只能使用 input type=“button”  标签

  6. 洛谷P4219 大融合

    LCT新姿势:维护子树信息. 不能带修,子树修改就要toptree了... 题意:动态加边,求子树大小. 解: 维护子树信息只要额外维护虚边连的儿子的信息即可.这里把siz的定义变成子树大小. 哪里会 ...

  7. bzoj3331 压力(圆方树)

    题目链接 圆方树 圆方树就是对于联通无向图中的每一个点双新建一个方点,与点双中的每个点连一条边,然后将原来的边删去.将原来的点看作圆点,新建的点看作方点.所以叫做圆方树. 性质 1.圆方树肯定是棵树( ...

  8. django 前端 js让一段文本中包含的网址可以被访问

    这个功能还是挺刚需的,下面说说实现过程,用到了正则表达式. 1.原本的html部分代码: <h4 id="softadd">链接: https://pan.baidu. ...

  9. ajax多表单序列化

    今天在修一个后台接收参数为空值的bug 找了好久才发现原来是form表单合拼参数的时候把参数给搞没了 (我也不知道为什么啊—_—!) //对表单进行Json对象序列化 (function($){ $. ...

  10. Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

    Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...