Java 项目日志实例:Log4j2

点击下方关注我,然后右上角点击..."设为星标",就能第一时间收到更新推送啦~~~

Apache Log4j 2 是对 Log4j 的升级,与其前身 Log4j 1.x 相比有了显着的改进,并提供了许多 Logback 可用的改进,同时支持 JCL 以及 SLF4J。

1

Log4j2 使用实例

1、选择 jar 包

引入 Log4j2 必要的包:log4j-api、log4j-core。

2、pom.xml 配置

xml 复制代码
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</version>
</dependency>


<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>

3、log2j 配置文件:log4j2.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- status用来指定Log4j本身的打印日志的级别 -->
<!--monitorInterval:Log4j能够自动检测修改配置文件和重新配置本身,设置间隔秒数 -->
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender -->
    <appenders>
        <!--这个输出控制台的配置 -->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式 -->
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
        </console>


        <!--定义输出到指定位置的文件 -->
        <File name="log" fileName="/jpm/log4j2/logs/log.log" append="true">
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
        </File>


        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFileInfo" fileName="/jpm/log4j2/logs/info.log"
            filePattern="/jpm/log4j2/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT"
                onMismatch="DENY" />
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了30 -->
            <DefaultRolloverStrategy max="30" />
        </RollingFile>


        <RollingFile name="RollingFileError" fileName="/jpm/log4j2/logs/error.log"
            filePattern="/jpm/log4j2/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT"
                onMismatch="DENY" />
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %l %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
        </RollingFile>
    </appenders>


    <!--只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>
        <root level="INFO">
            <appender-ref ref="Console" />
            <appender-ref ref="log" />
            <appender-ref ref="RollingFileInfo" />
            <appender-ref ref="RollingFileError" />
        </root>
    </loggers>


</configuration>

4、输出日志的代码示例

java 复制代码
package jpm.log4j2;    
import org.apache.logging.log4j.LogManager;    
import org.apache.logging.log4j.Logger;    
public class TestLog4j2 {        
public static void main(String[] args) {            
    final Logger LOGGER = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
    LOGGER.debug("TestLog4j2 debug log.");
    LOGGER.info("TestLog4j2 info log.");
    LOGGER.error("TestLog4j2 error log.");
  }
}

5、打印日志结果

2

关于日志 level

日志 level 共有 8 个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF。

All:最低等级的,用于打开所有日志记录

Trace:是追踪,就是程序推进以下,你就可以写个 trace 输出,所以 trace 应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出

Debug:指出细粒度信息事件对调试应用程序是非常有帮助的

Info:消息在粗粒度级别上突出强调应用程序的运行过程

Warn:输出警告及 warn 以下级别的日志

Error:输出错误信息日志

Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志

OFF:最高等级的,用于关闭所有日志记录

程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。

后面为大家介绍项目中的 JCL(java common logging) 和 SLF4J 分别与 Log4j 结合使用的示例。

相关推荐
野犬寒鸦3 分钟前
从零起步学习并发编程 || 第四章:synchronized底层源码级讲解及项目实战应用案例
java·服务器·开发语言·jvm·后端·学习·面试
!停4 分钟前
数据结构二叉树——堆
java·数据结构·算法
£漫步 云端彡7 分钟前
Golang学习历程【第十一篇 接口(interface)】
开发语言·学习·golang
virus59458 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
初次见面我叫泰隆8 小时前
Qt——3、常用控件
开发语言·qt·客户端
没差c9 小时前
springboot集成flyway
java·spring boot·后端
无小道9 小时前
Qt——QWidget
开发语言·qt
时艰.9 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
梵刹古音10 小时前
【C语言】 函数基础与定义
c语言·开发语言·算法
编程彩机10 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂