官网: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. Leetcode 167. 两数之和 II - 输入有序数组 By Python

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...

  2. 【转】设置 vim 显示行号永久有效

    在linux环境下,vim是常用的代码查看和编辑工具.在程序编译出错时,一般会提示出错的行号,但是用vim打开的代码确不显示行号,错误语句的定位非常不便.那么怎样才能让vim显示代码的行号呢? 1 临 ...

  3. 深入浅出QOS详解(转)

    QOS学习笔记 (工作时间之余,总结了这些,累的食指快脱节了,现在还在恢复中,为的就是让文章质量再提高点,希望对大家有帮助!文章太长,为方便,我附件上文章原文.) QOS,服务质量.顾名思义,就是为了 ...

  4. [SCOI2010]幸运数字(容斥+爆搜)

    在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是 ...

  5. MYSQL timestamp NOT NULL插入NULL的报错问题

    1. 在开发两个数据库数据同步功能的时候,需要在本地搭建一个本地的数据库作为一个本地库,然后用于同步开发库中的数据.在插入的时候出现了一个问题. 问题描述: 我们每张表中都会存在一个create_ti ...

  6. JavaWeb基础之Servlet简单实现用户登陆

    学习javaweb遇到了一些坑,一些问题总结下来,记个笔记. 学习servlet遇到的一些坑: servlet实现用户登陆遇到的坑解决办法: https://www.cnblogs.com/swxj/ ...

  7. css 蒙层

    蒙层 利用z-index: .mui-backdrop-other { position: fixed; top: 44px; right:; bottom:; left:; z-index:; ba ...

  8. Arch Linux中使用VMware Workstation不能打开vmmon内核模块

    打开VMware Workstation出现错误提示:Could not open /dev/vmmon: No such device.Please make sure that the kerne ...

  9. 【洛谷P1896】互不侵犯

    题目大意:给定 N*N 的棋盘,一共放 K 个国王,一共有多少种方法. 题解: i&i<<1 判断是否每个 1 的位置之间都有 0. i&j<<1 判断 i 中 ...

  10. c 结构体 & 函数指针模拟实现一个java class(类) 和方法

    闲来无事,纯粹练习. student.h #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include <memory.h> ...