zoukankan      html  css  js  c++  java
  • SpringBoot项目中使用Logback进行日志管理

    Logback简介

    logback是由log4j创始人设计的又一个开源日志组件 , 优化了log4j存在的性能问题。

    logback包含了三个模块:logback-core、logback-classic、logback-access。

    • logback-core 是其它模块的基础设施,其它模块基于它构建,显然,logback-core 提供了一些关键的通用机制。
    • logback-classic 的地位和作用等同于 Log4J,它也被认为是 Log4J 的一个改进版,并且它实现了简单日志门面 SLF4J
    • logback-access 主要作为一个与 Servlet 容器交互的模块,比如说tomcat或 jetty,提供一些与 HTTP 访问相关的功能。

    SpringBoot的日志模块

    当需要配置日志信息时,可以在application.properties、application.yaml中进行简单的配置,比如日志级别。 SpringBoot默认为我们输出的日志级别为infowarnerror,如果还使用其他级别的日志,可以在配置中进行配置 。

    支持的日志级别有: ERROR, WARN, INFO, DEBUG , TRACE (Logback中没有FATAL级别,等同于ERROR)。

    日志级别 trace < debug < info < warn < error < fatal,高级别的日志会输出低级别的日志信息,反之不行,不区分大小写。

    在application.properties中配置:

    #配置根logger的输出级别,也可以直接使用大写的 LEVEL=WARN指定
    logging.level.root=WARN
    
    #指定logger的name属性为org.springframework.web,即该包下的日志级别为DEBUG
    logging.level.org.springframework.web=DEBUG
    logging.level.org.hibernate=ERROR
    
    #指定日志输出的文件路径,/在windows下是直接定位到当前工作文件磁盘下的
    logging.path=/logs
    #指定日志文件的名称
    logging.file=logs.log

    在application.yaml中:

    loggin: 
        level: 
            root: WARN

    Logback配置示例

    ?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml" />
        <logger name="org.springframework.web" level="INFO"/>
        <logger name="org.springboot.sample" level="TRACE" />
    
        <!-- 开发、测试环境 -->
        <springProfile name="dev,test">
            <logger name="org.springframework.web" level="INFO"/>
            <logger name="org.springboot.sample" level="INFO" />
            <logger name="com.xx.projectName" level="DEBUG" />
        </springProfile>
    
        <!-- 生产环境 -->
        <springProfile name="prod">
            <logger name="org.springframework.web" level="ERROR"/>
            <logger name="org.springboot.sample" level="INFO" />
            <logger name="com.xx.projectName" level="INFO" />
        </springProfile>
    
        <!-- root用来指定最基础的日志输出级别 -->
        <root level="INFO">
        </root>
    </configuration>

    Logback详细配置示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="10 seconds" debug="false">
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
        <contextName>logback</contextName>
    
        <property name="log_path" value="/log"/><!-- 如果在Windows环境下使用/开头的路径,将会被指定到项目所在的盘符 -->
        <!-- %d{yyyy-MM-dd HH:mm:ss.SSS}:日志输出时间,精确到分按天切割; -->
        <!-- %-5level:日志级别,并且使用5个字符靠左对齐; %thread:输出日志的进程名字 -->
        <!-- %logger{50}:日志输出者的名字; %msg:日志消息; %n:换行符 -->
        <property name="log_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{50} - %msg%n"/>
        <property name="log_fileNamePattern" value="-%d{yyyy-MM-dd}.%i.log"/>
        <property name="log_maxFileSize" value="100MB"/>
        <property name="log_maxHistory" value="15"/>
    
        <!-- 输出到控制台,一般生产环境都是后台启动,这个没太大作用 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>INFO</level>
            </filter>
            <encoder charset="UTF-8">
                <pattern>${log_pattern}</pattern>
            </encoder>
        </appender>
    
        <!-- 输出到app.log文件 -->
        <appender name="APP" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log_path}/app.log</file>
            <encoder charset="UTF-8">
                <pattern>${log_pattern}</pattern>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_path}/app${log_fileNamePattern}</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>${log_maxFileSize}</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>${log_maxHistory}</maxHistory>
            </rollingPolicy>
        </appender>
    
        <!-- 输出到sql.log文件 -->
        <appender name="SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${log_path}/sql.log</file>
            <encoder charset="UTF-8">
                <pattern>${log_pattern}</pattern>
            </encoder>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log_path}/sql-${log_fileNamePattern}</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>${log_maxFileSize}</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>${log_maxHistory}</maxHistory>
            </rollingPolicy>
        </appender>
    
        <!-- 自定义包日志级别要加上additivity="false",表示不会向上传递 -->
        <logger name="org.springframework">
            <level value="WARN"/>
        </logger>
        <logger name="org.apache" additivity="false">
            <level value="WARN"/>
        </logger>
        <logger name="org.mybatis" additivity="false">
            <level value="DEBUG"/>
        </logger>
    
        <!-- dao层的sql配置 -->
        <logger name="com.example.xxx.dao" level="DEBUG" additivity="false">
            <appender-ref ref="SQL" />
        </logger>
    
        <!-- root用来指定最基础的日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="APP"/>
        </root>
    
    </configuration>

    写博客是为了总结记录,而不应为了花里胡哨的标榜什么。比如写了一个算法,尽量联系下应用场景;看了一段源码,想一下对应用层调用有什么影响,做到学以致用,避免眼高手低。
  • 相关阅读:
    Spark官方文档——本地编写并运行scala程序
    scala函数组合器
    scala数组
    scala实现kmeans算法
    Nginx 服务器安装及配置文件详解
    OpenVAS开源风险评估系统部署方案
    Elasticsearch和Head插件安装
    手把手教你在CentOS 7.4下搭建Zabbix监控(转)
    elasticsearch6.X 及head插件部署(完整版)
    Vim配置(python版)
  • 原文地址:https://www.cnblogs.com/cappuccino-jay/p/14766784.html
Copyright © 2011-2022 走看看