Spring Boot日志集成

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 SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
Log4j2log4j2-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. <configurationdebug="false">
  3.    <springPropertyscope="context"name="APP_NAME"source="spring.application.name"/>
  4.    <springPropertyscope="context"name="APP_PORT"source="server.port"/>
  5.    <springPropertyscope="context"name="DEFAULT_APP_PORT"source="spring.application.port"/>
  6.    <propertyname="OS_NAME"value="${os.name}"/>
  7.    <ifcondition='property("OS_NAME").contains("Windows")'>
  8.        <then>
  9.            <propertyname="LOG_PATH"value="${LOG_PATH:-E:/logs}"/>
  10.        </then>
  11.        <else>
  12.            <propertyname="LOG_PATH"value="${LOG_PATH:-/log}"/>
  13.        </else>
  14.    </if>      
  15.    <propertyname="LOG_DIR"value="${APP_NAME:-system}"/>
  16.    <propertyname="APP_PORT"value="${APP_PORT:-${DEFAULT_APP_PORT:-0}}"/>
  17.    <ifcondition='!property("APP_PORT").equals("0")'>
  18.        <then>
  19.            <propertyname="LOG_DIR"value="${LOG_DIR}-${APP_PORT}"/>
  20.        </then>
  21.    </if>
  22.    <!-- 控制台输出 -->
  23.    <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">
  24.        <encoderclass="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.    <appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
  31.        <filterclass="ch.qos.logback.classic.filter.ThresholdFilter">
  32.            <level>INFO</level>
  33.        </filter>
  34.        <rollingPolicyclass="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.        <encoderclass="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.        <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  46.            <MaxFileSize>10MB</MaxFileSize>
  47.        </triggeringPolicy>
  48.    </appender>
  49.    <!-- 按照每天生成日志文件 error级别 -->
  50.    <appendername="FILE-ERROR"class="ch.qos.logback.core.rolling.RollingFileAppender">
  51.        <filterclass="ch.qos.logback.classic.filter.LevelFilter">
  52.            <level>ERROR</level>
  53.            <onMatch>ACCEPT</onMatch>
  54.            <onMismatch>DENY</onMismatch>
  55.        </filter>  
  56.        <rollingPolicyclass="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.        <encoderclass="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.        <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  68.            <MaxFileSize>10MB</MaxFileSize>
  69.        </triggeringPolicy>
  70.    </appender>
  71.    <!--myibatis log configure -->
  72.    <loggername="com.apache.ibatis"level="TRACE"/>
  73.    <loggername="java.sql.Connection"level="DEBUG"/>
  74.    <loggername="java.sql.Statement"level="DEBUG"/>
  75.    <loggername="java.sql.PreparedStatement"level="DEBUG"/>
  76.    <!-- 日志输出级别 -->
  77.    <rootlevel="INFO">
  78.        <appender-refref="STDOUT"/>
  79.        <appender-refref="FILE"/>
  80.        <appender-refref="FILE-ERROR"/>
  81.    </root>
  82. </configuration>
强烈推荐使用logback-spring.xml作为文件名,因为logback.xml加载太早。
日志初始化在ApplicationContext创建之前,所以@PropertySources加载的配置是读取不到的,系统环境变量、Spring Environment及application,bootstrap配置文件中的信息可以读取到。
读取系统环境属性:
  1. <propertyname="LOG_PATH"value="${LOG_PATH:-E:/logs}"/>
读取当前应用Environment中的属性:
  1. <springPropertyscope="context"name="fluentHost"source="myapp.fluentd.host"
  2.        defaultValue="localhost"/>
Spring Boot也支持通过springProfile来加载不同profiles下的配置。
  1. <springProfilename="staging">
  2.    <!-- configuration to be enabled when the "staging" profile is active -->
  3. </springProfile>
  4. <springProfilename="dev, staging">
  5.    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
  6. </springProfile>
  7. <springProfilename="!production">
  8.    <!-- configuration to be enabled when the "production" profile is not active -->
  9. </springProfile>

本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Spring Boot日志集成
分享到:
赞(0)

评论抢沙发

评论前必须登录!