log4j2是log4j的最新版,现在已经有很多公司在使用了。log4j2和log4j的优缺点对比,请自行百度。
上一篇笔记讲了关于log4j的使用。这篇笔记主要讲解log4j2的使用。

一、maven依赖的配置

        log4j-core这个依赖加进来就有log4j-core和log4j-api这两个jar包了,一般开发情况下有这两个jar就可以。
但是,笔者发现spring和struts2的日志不输出。网上找了下,发现还需要log4j-web和log4j-jcl这两个jar包,因此一共需要导4个jar包。


下面为maven依赖xml代码

	<!-- 如果采用log4j2的话,需要下面3个依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.8.2</version>
</dependency>
19
 
1
    <!-- 如果采用log4j2的话,需要下面3个依赖 -->  
2
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
3
    <dependency>
4
        <groupId>org.apache.logging.log4j</groupId>
5
        <artifactId>log4j-core</artifactId>
6
        <version>2.8.2</version>
7
    </dependency>
8
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-web -->
9
    <dependency>
10
        <groupId>org.apache.logging.log4j</groupId>
11
        <artifactId>log4j-web</artifactId>
12
        <version>2.8.2</version>
13
    </dependency>
14
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl -->
15
    <dependency>
16
        <groupId>org.apache.logging.log4j</groupId>
17
        <artifactId>log4j-jcl</artifactId>
18
        <version>2.8.2</version>
19
    </dependency>

二、配置log4j2.xml

        log4j2的配置方式有多种,比如xml、json等。这里用的xml配置,我们需要把log4j2.xml这个文件放到src下。注意这个文件名必须为log4j2.xml。xml配置的方式其实不难,只要会用老版log4j的人都能看懂一点。
        配置的话可以分为2步:
              (1)配置Appenders,就是配置输出端
              (2)配置Loggers,这个就是配置比如指定包的日志级别以及Root的配置。
               注意点:定义好的输出端一定要引用才能生效
      (1)直接贴代码

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

<!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出。
因此我们直接设置成OFF
-->
<Configuration status="OFF"> <!-- 配置输出端 -->
<Appenders>
<!-- 输出到控制台 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-level]%d{HH:mm:ss.SSS} [%t] %logger{36} - %msg%n" />
</Console> <!-- 输出到文件 -->
<!--
name: 输出端的名字
fileName: 指定当前日志文件的位置和文件名称
filePattern: 指定当发生自动封存日志时,文件的转移和重命名规则
这个filePatten结合下面的TimeBasedTriggeringPolicy一起使用,可以实现控制日志按天生成文件.
自动封存日志的策略可以设置时间策略和文件大小策略(见下面的Policies配置)
时间策略:
文件名_%d{yyyy-MM-dd}_%i.log 这里%d表示自动封存日志的单位是天
如果下面的TimeBasedTriggeringPolicy的interval设为1,
表示每天自动封存日志一次;那么就是一天生成一个文件。
文件大小策略:
如果你设置了SizeBasedTriggeringPolicy的size的话,
超过了这个size就会再生成一个文件,这里的%i用来区分的
%d{yyyy-MM-dd}会自动替代为日期,如2017-06-30
-->
<RollingFile name="RollingFileInfo" fileName="D:/log/tax_info.log"
filePattern="D:/log/%d{yyyy-MM-dd}/tax_info_%d{yyyy-MM-dd}_%i.log">
<!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<!-- 输出的格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
<!--
Policies:自动封存日志策略,表示日志什么时候应该产生新日志,
可以有时间策略和大小策略等,并且:只有满足一个策略,就好生成一个新的文件。
这里使用的是时间和大小都使用了,每隔1天产生新的日志文件
如果果今天的文件大小到了设定的size,则会新生成一个文件,上面的%i就表示今天的第几个文件
-->
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
<SizeBasedTriggeringPolicy size="20MB" />
</Policies>
<!--
DefaultRolloverStrategy属性如不设置,
则默认为最多同一文件夹下7个文件,这里设置了20
-->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders> <!-- 配置Loggers -->
<Loggers>
<!--
Logger: 用于指定部分包的日志级别
日志级别局部的会覆盖全局的
比如这里hibernate的级别设为debug,而控制台没有设级别,那么控制台会打印debug级别的日志
而输出到文件这个输出端设置了info级别,那么hibernate的debug级别的日志还是看不了。
所以最终输出的级别和输出端设置的级别是有关系的。
name: 包名
level:日志级别
additivity:是否冒泡,既在当前logger的输出端输出日志后
是否需要在父输出端上输出该日志,默认为 true。
如果设为false,则必须配置AppendRef。
-->
<Logger name="org.hibernate" level="debug" additivity="true" /> <!-- 这个root是配置全局日志级别和输出端功能和老版的log4j中根的配置是一样的 -->
<Root level="info">
<!-- 这里引用上面定义的输出端,千万不要漏了。 -->
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFileInfo" />
</Root>
</Loggers> </Configuration>
x
 
1
<?xml version="1.0" encoding="UTF-8"?> 
2
 
3
<!-- 
4
    status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出。
5
    因此我们直接设置成OFF
6
 -->
7
<Configuration status="OFF">
8

9
    <!-- 配置输出端  -->
10
    <Appenders>
11
        <!-- 输出到控制台  -->
12
        <Console name="Console" target="SYSTEM_OUT">
13
            <PatternLayout pattern="[%-level]%d{HH:mm:ss.SSS} [%t] %logger{36} - %msg%n" />
14
        </Console>
15
        
16
        <!-- 输出到文件 -->
17
        <!-- 
18
            name:           输出端的名字
19
            fileName:       指定当前日志文件的位置和文件名称
20
            filePattern:    指定当发生自动封存日志时,文件的转移和重命名规则
21
            这个filePatten结合下面的TimeBasedTriggeringPolicy一起使用,可以实现控制日志按天生成文件.
22
            自动封存日志的策略可以设置时间策略和文件大小策略(见下面的Policies配置)
23
            时间策略:
24
                文件名_%d{yyyy-MM-dd}_%i.log  这里%d表示自动封存日志的单位是天
25
                如果下面的TimeBasedTriggeringPolicy的interval设为1,
26
                表示每天自动封存日志一次;那么就是一天生成一个文件。
27
            文件大小策略:
28
                如果你设置了SizeBasedTriggeringPolicy的size的话,
29
                超过了这个size就会再生成一个文件,这里的%i用来区分的
30
            %d{yyyy-MM-dd}会自动替代为日期,如2017-06-30
31
        -->
32
        <RollingFile name="RollingFileInfo" fileName="D:/log/tax_info.log"
33
            filePattern="D:/log/%d{yyyy-MM-dd}/tax_info_%d{yyyy-MM-dd}_%i.log">
34
            <!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
35
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
36
            <!-- 输出的格式  -->
37
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
38
            <!-- 
39
                Policies:自动封存日志策略,表示日志什么时候应该产生新日志,
40
                可以有时间策略和大小策略等,并且:只有满足一个策略,就好生成一个新的文件。
41
                这里使用的是时间和大小都使用了,每隔1天产生新的日志文件
42
                如果果今天的文件大小到了设定的size,则会新生成一个文件,上面的%i就表示今天的第几个文件
43
             -->
44
            <Policies>
45
                <TimeBasedTriggeringPolicy  interval="1" />
46
                <SizeBasedTriggeringPolicy  size="20MB" />
47
            </Policies>
48
            <!-- 
49
                DefaultRolloverStrategy属性如不设置,
50
                则默认为最多同一文件夹下7个文件,这里设置了20
51
             -->
52
            <DefaultRolloverStrategy max="20"/>
53
        </RollingFile>
54
    </Appenders>
55

56
    <!-- 配置Loggers  -->
57
    <Loggers>
58
        <!-- 
59
            Logger: 用于指定部分包的日志级别
60
                日志级别局部的会覆盖全局的
61
                比如这里hibernate的级别设为debug,而控制台没有设级别,那么控制台会打印debug级别的日志
62
                而输出到文件这个输出端设置了info级别,那么hibernate的debug级别的日志还是看不了。
63
                所以最终输出的级别和输出端设置的级别是有关系的。
64
            name: 包名
65
            level:日志级别
66
            additivity:是否冒泡,既在当前logger的输出端输出日志后
67
                             是否需要在父输出端上输出该日志,默认为 true。
68
                             如果设为false,则必须配置AppendRef。
69
         -->
70
        <Logger name="org.hibernate" level="debug" additivity="true" />
71
        
72
        <!-- 这个root是配置全局日志级别和输出端功能和老版的log4j中根的配置是一样的 -->
73
        <Root level="info">
74
            <!-- 这里引用上面定义的输出端,千万不要漏了。 -->
75
            <AppenderRef ref="Console" />
76
            <AppenderRef ref="RollingFileInfo" />
77
        </Root>
78
    </Loggers>
79

80
</Configuration>  
   
  (2)这里重点解释下 Logger中的additivity属性
       这个属性在我看了网上好多人的博客上的解释的情况下,最后确定了他的具体作用。
   additivity表示是否需要将当前Logger的日志打印在父级的输出端上,默认是true,即默认在父级输出端上打印。
   这个Logger的父级就是root了。下面进行各种情况的分析。

       <1>. 上文中的Logger没有配置输出端,additivity为true;那么这个Logger的日志是在他父级(root)的输出端输出。
   所以在控制台可以看到debug级别的日志。
       <2>. 如果Logger没有配置输出端,additivity为false;那么他不会在他的父级的输出端输出,所以这个日志就不会输出。
   这会造成配置的这个Logger的包及子包下的所有的日志都不会输出,这个是个很危险的配置。
       <3>. 如果Logger配置在控制台输出,additivity为true;而root的输出端也有控制台,那么这个日志会打印2遍。
       <4>. 如果Logger配置在控制台输出,additivity为false;那么不会在root的输出端输出,这个日志只会打印1遍。

    通过这4种情况的分析:个人认为最佳配置为,Logger不配置输出端,additivity设为true。
        让Logger使用root的输出端输出。这样配置简单,也不会出现不打印或者多打印日志的问题。
         <Logger name="com.test" level="debug" additivity="true" />

    参考链接:http://blog.csdn.net/junshao90/article/details/8364812
        

 (3)生成的日志文件的效果图:
                

三、java代码中使用log4j2打印日志

    public static void main(String[] args) {
Logger logger = LogManager.getLogger(TestSpring.class);
logger.debug("这是debug");
logger.info("这是Info");
logger.error("这是error");
}
 
1
    public static void main(String[] args) {
2
        Logger logger = LogManager.getLogger(TestSpring.class);  
3
        logger.debug("这是debug");
4
        logger.info("这是Info");
5
        logger.error("这是error");
6
    }


 


 

 

 

Log4j2使用笔记的更多相关文章

  1. Log4j2 配置笔记(Eclipse+maven+SpringMVC)

    Log4j2相关介绍可以百度看下,这里只注重配置Log4j2 能够马上跑起来: 1.pom.xml文件中添加Log4j2的相关Maven配置信息 <!-- log4j2 --> <d ...

  2. log4j2的配置文件log4j2.xml笔记

    一.背景 最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方 ...

  3. 笔记:MyBatis 日志显示-log4j2

    在ClassPath路径创建log4j2.xml配置文件,增加如下日志配置: <?xml version="1.0" encoding="UTF-8"?& ...

  4. 学习笔记—log4j2

    概念 什么是日志 日志是系统运行过程中的后台输出信息,方便程序员进行系统运行的管控以及Bug的查找. log4j2的概念 log4j2是一个日志输出的插件,专门用来进行日志的管理. Log4j是Apa ...

  5. log4j2笔记 #04# Appender的三个基本款以及RollingFile的各种示例配置

    粗糙笔记,留着备用. 三个基本款分别是ConsoleAppender.FileAppender(以及他的堂哥RandomAccessFileAppender).RollingFileAppender( ...

  6. log4j2笔记 #02# 启用异步日志

    索引 参考 Making All Loggers Asynchronous 第一步,添加相应的disruptor库 第二步,设置系统属性log4j2.contextSelector 第三步,检验! 参 ...

  7. Spring Boot 笔记 (2) - 使用 log4j2 记日志

    日志框架的选用 Spring 使用的默认日志框架是 logback, 默认情况下会采取默认的 autoconfiguration; 即便想对日志的一些配置进行修改也比较方便, 详细可以参考: Spri ...

  8. log4j2笔记 #03# PatternLayout

    该类的目标是格式化LogEvent并返回(字符串)结果.结果的格式取决于具体的模式字符串(pattern string).这里的模式字符串与c语言中printf函数的转换模式非常相似.模式字符串由“转 ...

  9. log4j2笔记 #01# Architecture

    索引 Architecture Main Components Logger Hierarchy LoggerContext Configuration Logger LoggerConfig Fil ...

随机推荐

  1. 安卓开发_计时器(Chronometer)的简单使用

    计时器控件(Chronometer)是一个可以显示从某个起始时间开始一共过去多长时间的本文. 继承自TextView,以文本的形式显示时间内容 该组件有五个方法 1.setBase(): \\用于设置 ...

  2. Linux下修改IP、DNS、路由命令行设置

    本文最后修改时间:20180313 一.快速修改,重启后设置就没了 ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up route add defa ...

  3. 安装VisualSVN Server 报"Service 'VisualSVN Server' failed to start. Please check VisualSVN Server log in Event Viewer for more details"错误.原因是启动"VisualSVN Server"失败

    安装VisualSVN Server 报"Service 'VisualSVN Server' failed to start. Please check VisualSVN Server ...

  4. WPF:验证登录后关闭登录窗口,显示主窗口的解决方法

    http://www.27ba.com/post/145.html WPF:验证登录后关闭登录窗口,显示主窗口的解决方法 最近想做一个基于Socket的通讯工具,想模仿QQ那样,需要先登录,登录成功后 ...

  5. C#使用Aforge调用摄像头拍照

    一. 新建一个Winform项目 二.使用Nuget添加引用 安装下图中红色框住的两个程序包 安装完后发现安装了如下图的程序包,这是因为上述两个程序包存在对其它程序包的依赖. 三.编写程序 1. 窗体 ...

  6. MySQL参数log_bin_trust_function_creators介绍-存储过程和复制

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  7. 字典Key值为变量

    m='aaa4a' d = dict(name=m) print d['name']

  8. 辽宁移动宽带体验及魔百盒M101s-2刷机

    一.背景 坐标:辽宁 某城,移动宽带100M. 设备:移动赠送,华为光猫一只,魔百盒M101s-2电视盒子 一只,据安装人员说这个魔百盒是移动自己开发设计的. 二.上网体验 上网:浏览一般网站没问题. ...

  9. IDEA 如何查看一个类里面的所有方法

    快捷键:Alt+7

  10. Alpha冲刺 - 事后诸葛亮

    Alpha冲刺 - 事后诸葛亮 Alpha完成情况表 Stardust(安卓端) 模块 预期计划 现实进展 完成度 登录/注册 登录时,从服务器拉取的数据并同步数据库.获取的数据有:用户名.密码.记录 ...