log4j2日志管理框架

1. 概述

我们在开发项目过程中,以及开发完成后项目上线运行过程中,都会用到日志管理,日志主要用来记录程序运行情况,用户各个操作,以及出现的异常信息,方便后期维护升级

2. 日志接口

slf4j是所有日志框架指定的一个规范,约束,标准

3. 日志实现

a.log4j是apache实现一个开源的日志组件,早期用的最多的日志框架
b.logback同样是log4j作者设计完成的,拥有更好的特性,设计初衷为了取代log4j的一个日志框架
  **log4j2是log4j1.x和logback 基础上改进来的,它拥有比log4j更好的性能,配置更加灵活

4.log4j2日志管理框架快速入门

a.引入log4j2相关依赖

<!--log4j2相关依赖-->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.13.1</version>
            </dependency>

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.13.1</version>
            </dependency>

b.编写日志的测试

c.日志级别

   1.log4j2会在类根路径下查找xml,json,properties,yaml格式的日志相关的配置文件

        找到:按照配置文件中的相关配置进行日志记录

        没找到:默认将日志记录信息输出到控制台

   2.日志的级别

TRACE:最低的日志级别,记录程序整个执行流程,一般不用
DEBUG:该级别对调试应用程序有帮助,例如:mybatis框架中记录输出的sql语句
INFO:记录应用程序在正常运行过程或者启动过程中产生一些重要的信息 例如:记录系统运行            到哪一个阶段,或者哪一个状态
WARN:记录警告信息或者潜在可能发生的错误  例如:mysql连接数据的时候,会提示未使用                  SSL连接的警告
      数据的连接没有释放掉,也可以使用WARN输出警告,因为过多的连接可能导致内存溢出
ERROR:发生异常,但仍然不影响系统的继续运行 ,我们一般可以把ERROR日志信息放在                       catch()中记录
 FATAL:严重的错误时间,这个错误会导致整个应用程序退出 例如:服务器宕机
     *   日志级别从低到高:
     *    TRACE<DEBUG<INFO<WARN<ERROR<FATAL
     *    如果设置了某个级别,那么log4j2记录当前级别以及更高的级别的日志信息
     *     例如:设置INFO级别,只记录INFO以及WARN,ERROR,FATAL
     *
     *   两个特殊级别:
     *     OFF:用于关闭所有级别日志记录
     *     ALL:用于打开所有级别日志记录

4.常见的log4j2日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--   Configuration:为根节点
        status属性的值有 “trace”, “debug”, “info”, “warn”, “error” , “fatal”,用于控制log4j2日志框架本身的日志级别-->
<Configuration status="WARN">

    <!--Appenders:定义输出内容,输出格式,输出方式,日志保存策略等,常用其下三种标签[console,File,RollingFile]-->
    <Appenders>
        <!--console :控制台输出的配置-->
        <Console name="Console" target="SYSTEM_OUT">
       <!-- PatternLayout:控制台或文件输出源(Console、File、RollingRandomAccessFile)都必须包含一个PatternLayout节点,用于指定输出文件的格式-->
        <!-- %d{HH:mm:ss.SSS} 表示输出到毫秒的时间
            %t 输出当前线程名称
            %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
            %logger 输出logger名称
            %msg 日志文本
            %n 换行

            其他常用的占位符有:
            %F 输出所在的类文件名,如Log4j2Test.java
            %L 输出行号
            %M 输出所在方法名
            %l 输出语句所在的行数, 包括类名、方法名、文件名、行数-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>

  <!--  日志器分根日志器Root和自定义日志器,当根据日志名字获取不到指定的日志器时就使用Root作为默认的日志器,
     自定义时需要指定每个Logger的名称name(对于命名可以以包名作为日志的名字,不同的包配置不同的级别等),日志级别

     对于一般的日志器(如Console、File、RollingRandomAccessFile)一般需要配置一个或多个输出源AppenderRef;

     每个logger可以指定一个level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定时level默认为ERROR-->
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <!--将日志输出到文件-->
        <File name="FileAppender" fileName="E:/logs/app.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>

    </Appenders>

    <Loggers>
        <!--自定义日志器-->
        <Logger name="fileLogger" level="info">
            <AppenderRef ref="FileAppender" />
        </Logger>

        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <properties>
        <property name="LOG_HOME">E:/logs</property>
        <property name="FILE_NAME">myLog</property>
    </properties>


    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %l - %msg%n"/>
        </Console>
        <!--   RollingRandomAccessFile: 该输出源也是写入到文件,不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,
                   另起一个文件继续写入日志,另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则

               fileName 指定当前日志文件的位置和文件名称
               filePattern 指定当发生Rolling时,文件的转移和重命名规则
               DefaultRolloverStrategy 指定最多保存的文件个数
               SizeBasedTriggeringPolicy 指定当文件体积大于size指定的值时,会按照filePattern文件名格式新建一个文件
               TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟
                                          TimeBasedTriggeringPolicy 指定的interval是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件
             -->
        <RollingRandomAccessFile name="RollingRandomAccessFile" fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm-ss}-%i.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="10"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <Logger name="RollingRandomAccessFileLogger" level="info" additivity="false">
            <AppenderRef ref="RollingRandomAccessFile" />
            <AppenderRef ref="Console" />
        </Logger>
    </Loggers>
</Configuration>

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值