官网: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. wcf 发布到iis后报错

    HTTP Error 404.3 - Not Found http://iweb.adefwebserver.com/Default.aspx?tabid=57&EntryID=34 未能从程 ...

  2. js处理异步的几种方式

    Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推) ...

  3. [WC2008]游览计划 解题报告

    [WC2008]游览计划 斯坦纳树板子题,其实就是状压dp 令\(dp_{i,s}\)表示任意点\(i\)联通关键点集合\(s\)的最小代价 然后有转移 \[ dp_{i,S}=\min_{T\in ...

  4. python查找字符串所有子串

    https://blog.csdn.net/jiangjiang_jian/article/details/79453856 [s[i:i + x + 1] for x in range(len(s) ...

  5. mysql查看正在执行的sql语句

    有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; ...

  6. 粉红猪小妹peppa pig中英文版209集+218本绘本+音频

    1.avi格式英文版包括,第一季52集有外挂英文字幕,第二季53集外挂英文字幕,第三季52集有外挂同步英文字幕,第四季1到39集有英文字幕,40-52无字幕.另有4季音频(每集都是单独的音频文件,方便 ...

  7. jQuery preventDefault() ,stopPropagation(),stopImmediatePropagation()

    preventDefault()函数用于阻止当前触发事件的默认行为. 在HTML文档中,当我们触发某些DOM元素的特定事件时,可以执行该元素的默认行为.比如链接的click事件:当我们点击一个链接时, ...

  8. vue $emit 用法

    1.父组件可以用props传递给子组件. 2.子组件可以利用$emit触发父组件事件. vm.$emit('父组件方法',参数); vm.$on(event,fn); $on监听event事件后运行f ...

  9. A1142. Maximal Clique

    A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...

  10. ERRORS: ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

    Ubuntu下,运行django项目的时候失败,报错: (env36) root@JD:~/xueyiwang# python manage.py runserver 0.0.0.0:8000 Per ...