springBoot日志输出

springBoot日志输出,笔记。

一、默认形式

    ① 日志级别有6个,从小到大为(一般使用中间4种):TRACE < DEBUG < INFO < WARN < ERROR < FATAL。

    ② springBoot 默认的日志级别为 INFO(即INFO、WARN、ERROR),并且在 spring-boot-starter 中已经包含了 spring-boot-starter-logging 日志框架(默认为 Logback)。

    ③ 默认使用方式为:private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

        logger.info(“test log”);

    ④ 默认输出到控制台。

    ⑤ 默认使用 src/main/resources 路径下的日志配置文件,且要求命名规范:推荐优先使用带有 -spring 的文件名作为你的日志配置,如使用logback-spring.xml




</p>

二、自定义化

    ① 可以指定日志的配置文件和日志的输出路径

        #Logging Config

        #日志文件的配置

        logging.config=classpath:logconfig.xml

        #日志文件的存放路径

        logging.path=/root/crmLogs

    ② 如果使用了 lombok,则使用方式为:

        类上增加注解:@Log4j(或者@Slf4j等),注意要引用 import lombok.extern.log4j.Log4j;

        然后直接打印日志,可以使用占位符:log.info("test info,name:{}", name);

三、配置文件说明

    ① 根节点下面有5个子节点:

        

    ② 根节点属性:

        scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

        scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

        debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

    ③ root 节点:

        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。

        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。 

        默认是DEBUG。 

        可以包含零个或多个元素,标识哪个appender将会添加到这个loger。

1
2
3
4
&nbsp;&nbsp;&nbsp;&nbsp;<root&nbsp;level="INFO">&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="INFO_FILE"&nbsp;/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="ERROR_FILE"&nbsp;/>
&nbsp;&nbsp;&nbsp;&nbsp;</root>

    ④ contextName 节点(此节点一般不使用):

        设置上下文名称,默认上下文名称为“default”。

        如:logback

        需要使用的地方如此使用:%contextName

    ⑤ property 节点:

        设置自定义变量,通过“${}”来使用变量。

        

    ⑥ appender 节点:

        很重要的节点,appender 用来格式化日志输出节点,有俩个属性 name 和 class,class 用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

        详细说明见后面的 Demo,注释比较详细。

        备注:

            一般控制台输出使用layout,文件输出使用encoder

            %d{HH: mm:ss.SSS}——日志输出时间

            %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用

            %-5level——日志级别,并且使用5个字符靠左对齐

            %logger{36}——日志输出者的名字

            %msg——日志消息

            %n——平台的换行符 

    ⑦ loger节点:

        用来设置某一个包或者具体的某一个类的日志打印级别、以及指定仅有一个name属性,一个可选的level和一个可选的addtivity属性。

            name:用来指定受此loger约束的某一个包或者具体的某一个类。

            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。

            addtivity:是否向上级loger传递打印信息。默认是true。

        如下两 Demo:

1
2
3
4
&nbsp;&nbsp;&nbsp;&nbsp;<logger&nbsp;name="com.jet.controller"/>
&nbsp;&nbsp;&nbsp;&nbsp;<logger&nbsp;name="com.jet.controller.TestController"&nbsp;level="WARN"&nbsp;additivity="false">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="console"/>
&nbsp;&nbsp;&nbsp;&nbsp;</logger>


    ⑧ 另,多环境配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&nbsp;&nbsp;&nbsp;&nbsp;<configuration>&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--&nbsp;测试环境+开发环境.&nbsp;多个使用逗号隔开.&nbsp;-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<springProfile&nbsp;name="test,dev">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<logger&nbsp;name="com.jet.controller"&nbsp;level="DEBUG"&nbsp;additivity="false">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="consoleLog"/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</logger>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</springProfile>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--&nbsp;生产环境.&nbsp;-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<springProfile&nbsp;name="prod">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<logger&nbsp;name="com.jet.controller"&nbsp;level="INFO"&nbsp;additivity="false">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="consoleLog"/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</logger>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</springProfile>
&nbsp;&nbsp;&nbsp;&nbsp;</configuration>


        application 中配置:spring.profiles.active=test


四、配置文件 Demo


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<configuration&nbsp;scan="true"&nbsp;scanPeriod="10&nbsp;seconds">
&nbsp;&nbsp;&nbsp;&nbsp;<include&nbsp;resource="org/springframework/boot/logging/logback/base.xml"&nbsp;/>
&nbsp;&nbsp;&nbsp;&nbsp;<appender&nbsp;name="INFO_FILE"&nbsp;class="ch.qos.logback.core.rolling.RollingFileAppender">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--&nbsp;如果只是想要&nbsp;Info&nbsp;级别的日志,只是过滤&nbsp;info&nbsp;还是会输出&nbsp;Error&nbsp;日志,因为&nbsp;Error&nbsp;的级别高,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用下面的策略,可以避免输出&nbsp;Error&nbsp;的日志&nbsp;-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<filter&nbsp;class="ch.qos.logback.classic.filter.LevelFilter">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--过滤&nbsp;Error-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<level>ERROR</level>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--匹配到就禁止-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<onMatch>DENY</onMatch>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--没有匹配到就允许-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<onMismatch>ACCEPT</onMismatch>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</filter>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--日志名称,如果没有File&nbsp;属性,那么只会使用FileNamePattern的文件路径规则
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的日志改名为今天的日期。即,<File>&nbsp;的日志都是当天的。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<File>${LOG_PATH}/service_info.log</File>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--滚动策略,按照时间滚动&nbsp;TimeBasedRollingPolicy-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<rollingPolicy&nbsp;class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<fileNamePattern>${LOG_PATH}/service_info-%d{yyyy-MM-dd}.log.%i</fileNamePattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<timeBasedFileNamingAndTriggeringPolicy&nbsp;class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<maxFileSize>500MB</maxFileSize>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</timeBasedFileNamingAndTriggeringPolicy>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--只保留最近180天的日志-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<maxHistory>180</maxHistory>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</rollingPolicy>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--日志输出编码格式化-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--<encoder>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<charset>UTF-8</charset>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<pattern>&nbsp;%d{yyyy-MM-dd&nbsp;HH:mm:ss.SSS}&nbsp;%-5level&nbsp;[%thread]&nbsp;%logger{36}&nbsp;-&nbsp;%msg%n</pattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</encoder>-->
<!--展示格式&nbsp;layout-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<layout&nbsp;class="ch.qos.logback.classic.PatternLayout">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<Pattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%d{yyyy-MM-dd&nbsp;HH:mm:ss.SSS}&nbsp;%-5level&nbsp;[%thread]&nbsp;%logger{36}&nbsp;-&nbsp;%msg%n
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</Pattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</layout>
&nbsp;&nbsp;&nbsp;&nbsp;</appender>
&nbsp;&nbsp;&nbsp;&nbsp;<appender&nbsp;name="ERROR_FILE"&nbsp;class="ch.qos.logback.core.rolling.RollingFileAppender">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--如果只是想要&nbsp;Error&nbsp;级别的日志,那么需要过滤一下,默认是&nbsp;info&nbsp;级别的,ThresholdFilter-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<filter&nbsp;class="ch.qos.logback.classic.filter.ThresholdFilter">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<level>ERROR</level>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</filter>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<File>${LOG_PATH}/service_error.log</File>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<rollingPolicy&nbsp;class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<fileNamePattern>${LOG_PATH}/service_error-%d{yyyy-MM-dd}.log.%i</fileNamePattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<timeBasedFileNamingAndTriggeringPolicy&nbsp;class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<maxFileSize>500MB</maxFileSize>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</timeBasedFileNamingAndTriggeringPolicy>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<maxHistory>180</maxHistory>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</rollingPolicy>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--<encoder>-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--<charset>UTF-8</charset>-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--<pattern>&nbsp;%d{yyyy-MM-dd&nbsp;HH:mm:ss.SSS}&nbsp;%-5level&nbsp;[%thread]&nbsp;%logger{36}&nbsp;-&nbsp;%msg%n</pattern>-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--</encoder>-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<layout&nbsp;class="ch.qos.logback.classic.PatternLayout">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<Pattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%d{yyyy-MM-dd&nbsp;HH:mm:ss.SSS}&nbsp;%-5level&nbsp;[%thread]&nbsp;%logger{36}&nbsp;-&nbsp;%msg%n
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</Pattern>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</layout>
&nbsp;&nbsp;&nbsp;&nbsp;</appender>
<!--指定最基础的日志输出级别-->
&nbsp;&nbsp;&nbsp;&nbsp;<root&nbsp;level="INFO">
<!--appender将会添加到这个loger-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="INFO_FILE"&nbsp;/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<appender-ref&nbsp;ref="ERROR_FILE"&nbsp;/>
&nbsp;&nbsp;&nbsp;&nbsp;</root>
</configuration>






------ 本文结束 感谢阅读 ------
0%