嘎里三分熟
  • 首页
  • JMusic
  • TSBay
  • 常用工具
  • About Me
  • 留言板
一行代码一世浮生
  1. 首页
  2. Java web
  3. SpringBoot
  4. 正文

springBoot日志输出

2018年09月12日 1679点热度 2人点赞 0条评论

一、默认形式

    ① 日志级别有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


二、自定义化

    ① 可以指定日志的配置文件和日志的输出路径         #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);

三、配置文件说明

    ① 根节点<configuration>下面有5个子节点:

        <root>、<contextName>、<property>、<appender>、<loger>

    ② 根节点<configuration>属性:

        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。
    <root level="INFO">    
       <appender-ref ref="INFO_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

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

        设置上下文名称,默认上下文名称为“default”。
        如:<contextName>logback</contextName>         需要使用的地方如此使用:%contextName

    ⑤ property 节点:

        设置自定义变量,通过“${}”来使用变量。         <property name="logback.appname" value="app"/>

    ⑥ appender 节点:

        很重要的节点,appender 用来格式化日志输出节点,有俩个属性 name 和 class,class 用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。         详细说明见后面的 Demo,注释比较详细。
        备注:             一般控制台输出使用layout,文件输出使用encoder             %d{HH: mm:ss.SSS}——日志输出时间             %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用             %-5level——日志级别,并且使用5个字符靠左对齐             %logger{36}——日志输出者的名字             %msg——日志消息             %n——平台的换行符 

    ⑦ loger节点:

        <loger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。<loger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。             name:用来指定受此loger约束的某一个包或者具体的某一个类。             level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。             addtivity:是否向上级loger传递打印信息。默认是true。         如下两 Demo:
    <logger name="com.jet.controller"/>
    <logger name="com.jet.controller.TestController" level="WARN" additivity="false">
        <appender-ref ref="console"/>
    </logger>

    ⑧ 另,多环境配置:

    <configuration>    
        ...
        <!-- 测试环境+开发环境. 多个使用逗号隔开. -->
        <springProfile name="test,dev">
            <logger name="com.jet.controller" level="DEBUG" additivity="false">
                <appender-ref ref="consoleLog"/>
            </logger>
        </springProfile>
        <!-- 生产环境. -->
        <springProfile name="prod">
            <logger name="com.jet.controller" level="INFO" additivity="false">
                <appender-ref ref="consoleLog"/>
            </logger>
        </springProfile>
    </configuration>

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

四、配置文件 Demo


<configuration scan="true" scanPeriod="10 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,
            使用下面的策略,可以避免输出 Error 的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--过滤 Error-->
            <level>ERROR</level>
            <!--匹配到就禁止-->
            <onMatch>DENY</onMatch>
            <!--没有匹配到就允许-->
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
        <File>${LOG_PATH}/service_info.log</File>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <fileNamePattern>${LOG_PATH}/service_info-%d{yyyy-MM-dd}.log.%i</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>500MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--只保留最近180天的日志-->
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <!--<encoder>
            <charset>UTF-8</charset>
            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>-->
<!--展示格式 layout-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <File>${LOG_PATH}/service_error.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/service_error-%d{yyyy-MM-dd}.log.%i</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>500MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <!--<encoder>-->
            <!--<charset>UTF-8</charset>-->
            <!--<pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>-->
        <!--</encoder>-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>
<!--指定最基础的日志输出级别-->
    <root level="INFO">
<!--appender将会添加到这个loger-->
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>
</configuration>





本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: logger lombok SpringBoot 日志
最后更新:2018年09月12日

GoldenJet

爱折腾技术的90后漫威小死忠程序员一枚

点赞
< 上一篇
下一篇 >

文章评论

取消回复

通过电子邮件订阅博客

分类目录
  • BootStrap (2)
  • Bug集中营 (6)
  • Java web (3)
  • JavaScript (7)
  • Java基础 (17)
  • Java工具 (5)
  • Linux (3)
  • Python (3)
  • SpringBoot (14)
  • Spring基础 (8)
  • thymeleaf (1)
  • 娱乐 (3)
  • 小谈 (2)
  • 常用工具 (7)
  • 技术分析集 (5)
  • 技能 (10)
  • 源码 (4)
  • 科普类 (1)
  • 算法 (9)
  • 踩坑记 (5)
文章归档
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年4月 (2)
  • 2020年3月 (1)
  • 2020年1月 (1)
  • 2019年11月 (1)
  • 2019年10月 (1)
  • 2019年9月 (1)
  • 2019年8月 (1)
  • 2019年7月 (2)
  • 2019年5月 (2)
  • 2019年4月 (2)
  • 2019年3月 (3)
  • 2019年2月 (2)
  • 2019年1月 (2)
  • 2018年12月 (2)
  • 2018年11月 (3)
  • 2018年10月 (3)
  • 2018年9月 (2)
  • 2018年8月 (3)
  • 2018年7月 (2)
  • 2018年5月 (1)
  • 2018年4月 (3)
  • 2018年3月 (2)
  • 2018年2月 (3)
  • 2018年1月 (5)
  • 2017年12月 (2)
  • 2017年11月 (3)
  • 2017年10月 (1)
  • 2017年9月 (1)
  • 2017年8月 (1)
  • 2017年7月 (7)
  • 2017年6月 (5)
  • 2017年5月 (1)
  • 2017年4月 (2)
  • 2017年3月 (4)
  • 2017年2月 (2)
小伙伴友链
  • 前端驿站

COPYRIGHT © 2017-2020 嘎里三分熟. ALL RIGHTS RESERVED.

浙ICP备17005575号-1

浙公网安备 33010802009043号