zoukankan      html  css  js  c++  java
  • Spring Boot日志集成

    Spring Boot日志框架

    Spring Boot支持Java Util Logging,Log4j2,Lockback作为日志框架,如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。

    spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象及Logback日志框架。

    属性配置日志

    Spring Boot支持属性配置日志参数,这个不是很灵活,不细讲。

    参考配置:

    
     
    1. # LOGGING

    2. logging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logback

    3. logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.

    4. logging.file= # Log file name. For instance `myapp.log`

    5. logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`

    6. logging.path= # Location of the log file. For instance `/var/log`

    7. logging.pattern.console= # Appender pattern for output to the console. Only supported with the default logback setup.

    8. logging.pattern.file= # Appender pattern for output to the file. Only supported with the default logback setup.

    9. logging.pattern.level= # Appender pattern for log level (default %5p). Only supported with the default logback setup.

    10. logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.

    如:

    
     
    1. logging.level.root=DEBUG

    2. logging.level.org.springframework.web=DEBUG

    3. logging.level.org.hibernate=ERROR

    自定义日志文件

    根据不同的日志框架,默认加载的日志配置文件的文件名,放在资源根目录下,其他的目录及文件名不能被加载。

    Logging System Customization
    Logback logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
    Log4j2 log4j2-spring.xml or log4j2.xml
    JDK (Java Util Logging) logging.properties

    既然默认自带了Logback框架,Logback也是最优秀的日志框架,往资源目录下创建一个logback-spring.xml即可,下面是一个参考配置文件。

    
     
    1. <?xml version="1.0" encoding="UTF-8"?>

    2. <configuration debug="false">

    3.    <springProperty scope="context" name="APP_NAME" source="spring.application.name"/>

    4.    <springProperty scope="context" name="APP_PORT" source="server.port"/>

    5.    <springProperty scope="context" name="DEFAULT_APP_PORT" source="spring.application.port"/>

    6.    <property name="OS_NAME" value="${os.name}"/>

    7.    <if condition='property("OS_NAME").contains("Windows")'>

    8.        <then>

    9.            <property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" />

    10.        </then>

    11.        <else>

    12.            <property name="LOG_PATH" value="${LOG_PATH:-/log}" />

    13.        </else>

    14.    </if>      

    15.    <property name="LOG_DIR" value="${APP_NAME:-system}" />

    16.    <property name="APP_PORT" value="${APP_PORT:-${DEFAULT_APP_PORT:-0}}" />

    17.    <if condition='!property("APP_PORT").equals("0")'>

    18.        <then>

    19.            <property name="LOG_DIR" value="${LOG_DIR}-${APP_PORT}" />

    20.        </then>

    21.    </if>

    22.    <!-- 控制台输出 -->

    23.    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

    24.        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

    25.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符 -->

    26.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>

    27.        </encoder>

    28.    </appender>

    29.    <!-- 按照每天生成日志文件 -->

    30.    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

    31.        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

    32.            <level>INFO</level>

    33.        </filter>

    34.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

    35.            <!--日志文件输出的文件名 -->

    36.            <FileNamePattern>${LOG_PATH}/${LOG_DIR}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern>

    37.            <!--日志文件保留天数 -->

    38.            <MaxHistory>30</MaxHistory>

    39.        </rollingPolicy>

    40.        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

    41.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->

    42.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>

    43.        </encoder>

    44.        <!--日志文件最大的大小 -->

    45.        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

    46.            <MaxFileSize>10MB</MaxFileSize>

    47.        </triggeringPolicy>

    48.    </appender>

    49.    <!-- 按照每天生成日志文件 error级别 -->

    50.    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">

    51.        <filter class="ch.qos.logback.classic.filter.LevelFilter">

    52.            <level>ERROR</level>

    53.            <onMatch>ACCEPT</onMatch>

    54.            <onMismatch>DENY</onMismatch>

    55.        </filter>  

    56.        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

    57.            <!--日志文件输出的文件名 -->

    58.            <FileNamePattern>${LOG_PATH}/${LOG_DIR}/error.log.%d{yyyy-MM-dd}.log</FileNamePattern>

    59.            <!--日志文件保留天数 -->

    60.            <MaxHistory>30</MaxHistory>

    61.        </rollingPolicy>

    62.        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

    63.            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->

    64.            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>

    65.        </encoder>

    66.        <!--日志文件最大的大小 -->

    67.        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

    68.            <MaxFileSize>10MB</MaxFileSize>

    69.        </triggeringPolicy>

    70.    </appender>

    71.    <!--myibatis log configure -->

    72.    <logger name="com.apache.ibatis" level="TRACE" />

    73.    <logger name="java.sql.Connection" level="DEBUG" />

    74.    <logger name="java.sql.Statement" level="DEBUG" />

    75.    <logger name="java.sql.PreparedStatement" level="DEBUG" />

    76.    <!-- 日志输出级别 -->

    77.    <root level="INFO">

    78.        <appender-ref ref="STDOUT" />

    79.        <appender-ref ref="FILE" />

    80.        <appender-ref ref="FILE-ERROR" />

    81.    </root>

    82. </configuration>

    强烈推荐使用logback-spring.xml作为文件名,因为logback.xml加载太早。

    日志初始化在ApplicationContext创建之前,所以@PropertySources加载的配置是读取不到的,系统环境变量、Spring Environment及application,bootstrap配置文件中的信息可以读取到。

    读取系统环境属性:

    
     
    1. <property name="LOG_PATH" value="${LOG_PATH:-E:/logs}" />

    读取当前应用Environment中的属性:

    
     
    1. <springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"

    2.        defaultValue="localhost"/>

    Spring Boot也支持通过springProfile来加载不同profiles下的配置。

    
     
    1. <springProfile name="staging">

    2.    <!-- configuration to be enabled when the "staging" profile is active -->

    3. </springProfile>

    4. <springProfile name="dev, staging">

    5.    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->

    6. </springProfile>

    7. <springProfile name="!production">

    8.    <!-- configuration to be enabled when the "production" profile is not active -->

    9. </springProfile>

  • 相关阅读:
    Reversing Encryption(模拟水题)
    Alphabetic Removals(模拟水题)
    Mishka and Contest(模拟水题)
    DFS中的奇偶剪枝(技巧)
    三分法搜索
    最短的包含字符串 (尺取)
    Android开发:最详细的 NavigationDrawer 开发实践总结
    Android开发:最详细的 Toolbar 开发实践总结
    Android开发:Translucent System Bar 的最佳实践
    Android微信智能心跳方案
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710171.html
Copyright © 2011-2022 走看看