Springboot入门之集成log4j2

Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题。

1.去除依赖

由于springboot默认集成logback,所以再集成log4j2时需要删除默认依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions><!-- 去掉springboot默认配置 -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        
        <!--引入swagger时 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--引入actuator时 -->
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <!--引入spring-boot-starter-test时 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.添加log4j2依赖

        <!-- 引入log4j2依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

3.编写配置文件log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
    <Properties>
        <!--配置日志文件夹的名称和生成路径 -->
        <Property name="baseDir" value="./log"/>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout
                    pattern="%d %highlight{%-5level}{ERROR=Bright RED, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White} %style{[%t]}{bright,magenta} %style{%c{1.}.%M(%L)}{cyan}: %msg%n"/>
        </Console>

        <!--debug级别日志文件输出-->
        <RollingFile name="debug_appender" fileName="${baseDir}/${date:yyyy-MM-dd}-debug.log"
                     filePattern="${baseDir}/debug_%i.log.%d{yyyy-MM-dd}">
            <!-- 过滤器 -->
            <Filters>
                <!-- 限制日志级别在debug及以上在info以下 -->
                <ThresholdFilter level="debug"/>
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!-- 日志格式 -->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- 策略 -->
            <Policies>
                <!-- 每隔一天转存 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 文件大小 -->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

        <!-- info级别日志文件输出 -->
        <RollingFile name="info_appender" fileName="${baseDir}/${date:yyyy-MM-dd}-info.log"
                     filePattern="${baseDir}/info_%i.log.%d{yyyy-MM-dd}">
            <!-- 过滤器 -->
            <Filters>
                <!-- 限制日志级别在info及以上在error以下 -->
                <ThresholdFilter level="info"/>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!-- 日志格式 -->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- 策略 -->
            <Policies>
                <!-- 每隔一天转存 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 文件大小 -->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>

        <!-- error级别日志文件输出 -->
        <RollingFile name="error_appender" fileName="${baseDir}/${date:yyyy-MM-dd}-error.log"
                     filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
            <!-- 过滤器 -->
            <Filters>
                <!-- 限制日志级别在error及以上 -->
                <ThresholdFilter level="error"/>
            </Filters>
            <!-- 日志格式 -->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <!-- 每隔一天转存 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 文件大小 -->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="debug_appender"/>
            <AppenderRef ref="info_appender"/>
            <AppenderRef ref="error_appender"/>
        </Root>
    </Loggers>

</Configuration>

4.常见格式转换说明

%L,%line:

显示日志输出的代码所在的行数。Log4j在输出行号时会检查堆栈信息,是耗时的操作.     

%c{precision},%logger{precision}:

logger名称,precision可以是一个正整数、负整数、"1."、"1.1.."、"."等格式,用于指定输出的logger的名称的层级和详细程度

转换              原全限定类名                        转换结果
%c{1}             org.apache.commons.Foo             Foo
%c{2}             org.apache.commons.Foo             commons.Foo
%c{10}            org.apache.commons.Foo             org.apache.commons.Foo
%c{-1}            org.apache.commons.Foo             apache.commons.Foo
%c{-2}            org.apache.commons.Foo             commons.Foo
%c{-10}           org.apache.commons.Foo             org.apache.commons.Foo
%c{1.}            org.apache.commons.Foo             o.a.c.Foo
%c{1.1..}         org.apache.commons.test.Foo        o.a...Foo
%c{.}             org.apache.commons.test.Foo        ....Foo

 %C{precision},%class{precision}:

输出调用者的权限定类名,precision的规则与logger名称的用法相同。Log4j在输出类名时会检查堆栈信息,是耗时的操作,建议使用%c{precision}或%logger{precision}代替。

%d{pattern},%date{pattern}:

输出日志事件的时间,pattern经常包含若干对包含时间/日期格式(SimpleDateFormat)的花括号。    

转化模式1                            转化结果
%d{DEFAULT}                         2012-11-02 14:34:02,123
%d{DEFAULT_MICROS}                  2012-11-02 14:34:02,123456
%d{DEFAULT_NANOS}                   2012-11-02 14:34:02,123456789
%d{ISO8601}                         2012-11-02T14:34:02,781
%d{ISO8601_BASIC}                   20121102T143402,781
%d{ISO8601_OFFSET_DATE_TIME_HH}     2012-11-02'T'14:34:02,781-07
%d{ISO8601_OFFSET_DATE_TIME_HHMM}   2012-11-02'T'14:34:02,781-0700
%d{ISO8601_OFFSET_DATE_TIME_HHCMM}  2012-11-02'T'14:34:02,781-07:00
%d{ABSOLUTE}                        14:34:02,781
%d{ABSOLUTE_MICROS}                 14:34:02,123456
%d{ABSOLUTE_NANOS}                  14:34:02,123456789
%d{DATE}                            02 Nov 2012 14:34:02,781
%d{COMPACT}                         20121102143402781
%d{UNIX}                            1351866842
%d{UNIX_MILLIS}                     1351866842781

转化模式                                                                转化结果
       
%d{HH:mm:ss,SSS}                                                        14:34:02,123
%d{HH:mm:ss,nnnn} to %d{HH:mm:ss,nnnnnnnnn}                             14:34:02,1234 to 14:34:02,123456789
%d{dd MMM yyyy HH:mm:ss,SSS}                                            02 Nov 2012 14:34:02,123
%d{dd MMM yyyy HH:mm:ss,nnnn} to %d{dd MMM yyyy HH:mm:ss,nnnnnnnnn}     02 Nov 2012 14:34:02,1234 to 02 Nov 2012 14:34:02,123456789
%d{HH:mm:ss}{GMT+0}                                                     18:34:02
%d{yyyy-MM-dd HH:mm:ss.SSS}                                             2020-04-20 23:30:54.123

%m,%msg:

输出应用中自定义的日志内容;

%M,%method:

输出方法名。Log4j在输出行号时会检查堆栈信息,是耗时的操作;

%n:

输出当前运行平台所用的换行符,一般放在末尾;

%p|level{level=label, level=label, ...},%p|level{length=n}%p|level{lowerCase=true|false}:

输出日志的级别。可以每个日志级别指定别名,如%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I},
%level{length=1}也可以实现同样的效果,如果length的值超过了日志级别的名称,那么使用正常的日志级别名称。
level=label和length=n可以组合使用,如%level{ERROR=Error, length=2}为ERROR级别指定了别名,
为其他日志级别限定了长度。此外,还可以指定级别的大小写;

%T,%tid,%threadId:

输出日志的线程号,非常有必要;

%t,%tn,%thread,%threadName:

输出日志的线程名称,类似于线程号作用相同,可选择其中一个;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值