文档章节

log4j2之环境搭建及基础配置

yzChen233
 yzChen233
发布于 2016/10/15 18:27
字数 1120
阅读 3.6K
收藏 17

log4j2

本文是使用 Maven + springMVC + slf4j + log4j2(v2.7) 示例,并不是纯粹的 log4j2 ,如果执行不使用 slf4j,只需要在调用的地方,修改 loggerFactory 即可。

一般情况下,不做特殊配置,是会打印出很多spring的日志信息,所以文章后续在讲解配置文件时,会提到如何为指定的类做特定配置。

一、Maven pom.xml 添加依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.7</version>
</dependency>

注:若未使用 slf4j,则不需要引入 log4j-slf4j-impl。

二、添加 Log4j2.xml

添加位置: ${project}/src/main/resources 根目录

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别 trace, debug, info, warn, error, fatal -->
<!-- status:log4j相关的日志的打印级别,OFF即不打印,其他则按照标准级别配置即可,如 debug -->
<Configuration status="OFF">

    <!-- 定义日志存放目录(相对路径) -->
    <properties>
        <property name="logPath">logs</property>
    </properties>

    <!-- 定义所有的输出器 -->
    <Appenders>
        <!-- 输出到控制台,下面分别是 debug、info、error 级别的配置 -->
        <Console name="ConsoleDebugLog" target="SYSTEM_OUT">
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" />
        </Console>
        <Console name="ConsoleInfoLog" target="SYSTEM_OUT">
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" />
        </Console>
        <Console name="ConsoleErrorLog" target="SYSTEM_OUT">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%xEx%n" />
        </Console>
        
        <!-- INFO级别日志 按天输出到文件,归类到年月目录 -->
        <RollingFile name="InfoRollingFileLog" fileName="${logPath}/heyvgou.log" filePattern="${logPath}/$${date:yyyyMM}/heyvgou-%d{yyyy-MM-dd}.log">  
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
            </Policies>
        </RollingFile>
        
        <!-- ERROR级别日志 按天输出到文件,归类到年月目录 -->
        <RollingFile name="ErrorRollingFileLog" fileName="${logPath}/heyvgou-error.log" filePattern="${logPath}/$${date:yyyyMM}/heyvgou-error.log-%d{yyyy-MM-dd}.log">  
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%xEx%n" />
            <Policies>
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
            </Policies>
        </RollingFile>
        
    </Appenders>

    <Loggers>
        
        <!-- 项目整体默认日志配置,此处最低级别为 debug -->
        <Root level="debug">
            <AppenderRef ref="ConsoleDebugLog" />
            <AppenderRef ref="InfoRollingFileLog" />
            <AppenderRef ref="ErrorRollingFileLog" />
        </Root>
        
        <!-- 针对指定的 source package 代码配置(若比默认配置的日志级别高,则相当于忽略默认配置的级别打印,实现去除“不必要”的日志)--> 
        <logger name="org.springframework" level="INFO" additivity="false">
            <AppenderRef ref="ConsoleInfoLog" />
            <AppenderRef ref="ErrorRollingFileLog" />
        </logger>
        <logger name="net.sf" level="INFO" additivity="false">
            <AppenderRef ref="ConsoleErrorLog" />
            <AppenderRef ref="ErrorRollingFileLog" />
        </logger>
        
    </Loggers>

</Configuration>

三、Log4j2.xml 特殊配置简要分析

上面的配置中已经存有很多注释,所以简单的就不在此做解释,下面是针对一些特殊配置做一些简要的分析和描述

1、Appenders - Console、RollingFile 配置

本人是分不同级别配置 Console ,主要是为了在后面针对不同的类、代码包做配置,指定输出级别,避免“不必要”的日志输出。

2、Loggers - logger - name 属性

<logger name="org.springframework" level="INFO" additivity="false">
    <AppenderRef ref="ConsoleInfoLog" />
    <AppenderRef ref="ErrorRollingFileLog" />
</logger>
<logger name="net.sf" level="INFO" additivity="false">
    <AppenderRef ref="ConsoleErrorLog" />
    <AppenderRef ref="ErrorRollingFileLog" />
</logger>

大家可以看到,我这里分别配置了2个

  • org.springframework:INFO 级别的打印日志,ERROR 级别的文件日志

  • net.sf:ERROR 级别的打印日志,ERROR 级别的文件日志

此处我配置的都是 package,那是否可以直接指定到类呢?答案是可以的,比如说 org.springframework.beans.factory.BeanFactory

四、log4j2 plugins 插件开发

1. 什么是 log4j2 插件?

我们现在使用的 log4j2 API,都是它自带的,比如说打印的格式 %d{yyyy-MM-dd HH:mm:ss} 日期、%logger{36} 类名 等,如果我们实现了自定义的插件,比如说 %sessionId 当前的会话ID 等,实现 Converter 接口即可。

2. 开发 log4j2 插件简单吗?

一般的实现还是挺简单的

3. log4j2 插件可以做什么?

有没有同学想过,在日志文件中,默认打印出当前登录的用户信息?注意,是默认打印出来的,不是自己 logger.info("当前登录的用户名:" + user.getName()),而是 logger.info("当前登录的用户名:")

4. 如何开发 log4j2 插件?

由于本文只是简介 log4j2 的环境搭建及配置,本人会在后续的博客中陆续发布 lo4j2 的一些封装文章以及插件的开发教程,欢迎大家关注留意。

敬请期待!

My Blog

blog.guijianpan.com

技术交流

© 著作权归作者所有

yzChen233

yzChen233

粉丝 59
博文 13
码字总数 13943
作品 1
长沙
部门经理
私信 提问
加载中

评论(0)

Spring MVC:从零开始

前言:之前做的项目包括网上一些教程都是集很多配置和功能一起,有时候使用起来就比较乱。周末抽空从零搭建项目,一步步加新功能,也是让自己对spring配置有个更全面的了解。主要是对流程和配...

_Kelin
2017/08/27
1.9K
11
springboot使用log4j输出

参考链接:springboot日志体系---log4j2 前言 在搭建开发框架的时候,看了Springboot官方文档推荐使用Logback和log4j2做日志的输出,最终选择了log4j2 本文解决以下问题: - 为何使用log4j2 ...

特拉仔
2018/07/24
2.7K
0
转Spring Boot 教程系列学习

Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTfull API简单项目的快速搭建 Spring Boot基础教程3-配置文件详解:Properties和YAML Spring Boot基础教程4-配置...

小花卷juan
2017/06/14
300
0
spring+mybatis+druid集成log4j2

log4j2是log4j的替代产品,log4j2支持异步读写,在日志的读写性能上有很大的提高。相应的也就提高了系统的吞吐量。log4j没有更新了,已经被抛弃,所以在新的项目中完全可以抛弃log4j,然后采用...

上官胡闹
2017/04/28
604
0
SpringBoot系列之集成logback实现日志打印(篇二)

SpringBoot系列之集成logback实现日志打印(篇二) 基于上篇博客SpringBoot系列之集成logback实现日志打印(篇一)之后,再写一篇博客进行补充 logback是一款开源的日志框架,内核重写了,是基于...

smileNicky
2019/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

程序员必须掌握的核心算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程...

摩尔12
20分钟前
39
0
汇桔网被曝拖欠12月份工资至今,强制买产品,CEO称去年交易额超400亿

三言财经消息,近日有汇桔网员工爆料,汇桔网拖欠12月工资至今,通知延迟到4月才发放。 此外爆料还指出,“各种手法逼迫大家离开,员工要么继续忍受,要么主动离职,要么停薪留职。都不同意只...

小特工作室
21分钟前
34
0
「网易官方」极客战记(codecombat)攻略-地牢-明智的攻击attack-wisely

每个门后都有Ogres--你应该选择哪一个? 由玩家赖曼团创造。 默认代码 # 不要踩在火灾陷阱! hero.moveUp(); hero.moveRight(); hero.moveUp(); # ∆ 移除这行 有些食人魔比别人强大! 只有击...

极客战记
22分钟前
34
0
如何从源代码安装R软件包?

一位朋友给我发送了关于R的网上抓取这个很棒的教程。 我真的很想尝试。 但是,第一步是从源代码安装一个名为RJSONIO的软件包。 我对R非常了解,但是我不知道如何从源代码安装软件包。 我正在...

技术盛宴
32分钟前
44
0
nginx http模块配置合并

在配置nginx.conf文件的时候,我们很容易发现,有部分配置项是既可以配置在http块,也可以配置在server块,还可以配置在location块中。但是并不是所有的配置项都可以在任意位置进行配置的,根...

爱宝贝丶
34分钟前
36
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部