spring-boot | 日志

  理论知识

  1、为什么要用日志?你是否因为项目出现问题,查找日志文件定位错误花费N多时间,是否为此苦不堪言。

  2、Spring Boot 默认集成Logback。日志输出内容元素具体如下:

  ·时间日期:精确到毫秒

  ·日志级别:ERROR, WARN, INFO, DEBUG or TRACE

  ·进程ID

  ·分隔符:— 标识实际日志的开始

  ·线程名:方括号括起来(可能会截断控制台输出)

  ·Logger名:通常使用源代码的类名

  ·日志内容

  3、日志级别从低到高分为:

  TRACE DEBUG INFO WARN ERROR FATAL

  4、根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy

  Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

  Log4j2:log4j2-spring.xml, log4j2.xml

  JDK (Java Util Logging):logging.properties

  Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。

  理论知识很重要!!!

  虽说实践出真知,但是没有理论做支持,实践只能是盲目的瞎摸,所以,在学好理论的前提下,结合实践,就能更好的为我们服务。

  log很强大!

  实际开发

  1、我们先看项目目录:

  

  2、在application.yml中需要这样配置以下内容:

  spring:

  profiles:

  active: dev

  logback:

  appName: examplelog

  fileType: out

  3、在-dev.yml,-test.yml,-prod.yml中需要添加以下配置:

  logback:

  logDir: log/dev

  logging:

  level:

  com.fengwenyi.log: debug

  com.fengwenyi.log.service: error

  4、我们来看一下logback-spring.xml写法:

  !-- Logbackconfiguration. See http://logback.qos.ch/manual/index.html --

  configuration scan=truescanPeriod=10 seconds

  !--继承spring boot提供的logback配置--

  !--include resource=org/springframework/boot/logging/logback/base.xml /--

  !--设置系统日志目录--

  !--property name=APP_DIR value=spring-boot-log/--

  !--application.yml 传递参数,不能使用logback自带的property标签 --

  springProperty scope=context name=logDirsource=logback.logDir/

  springProperty scope=context name=appNamesource=logback.appName/

  springProperty scope=context name=fileType source=logback.fileType/

  !-- 彩色日志 --

  !-- 彩色日志依赖的渲染类 --

  conversionRule conversionWord=clr converterClass=org.springframework.boot.logging.logback.ColorConverter/

  conversionRule conversionWord=wex converterClass=org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter/

  conversionRule conversionWord=wEx converterClass=org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter/

  !-- 彩色日志格式 --

  property name=CONSOLE_LOG_PATTERN

  value=${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}/

  !-- 控制台输出 --

  appender name=CONSOLE class="ch".qos.logback.core.ConsoleAppender

  encoder

  Pattern${CONSOLE_LOG_PATTERN}/Pattern

  charsetUTF-8/charset !-- 此处设置字符集 --

  /encoder

  !--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--

  filter class="ch".qos.logback.classic.filter.ThresholdFilter

  leveldebug/level

  /filter

  /appender

  !-- 时间滚动输出 level为 DEBUG 日志 --

  appender name=DEBUG_FILE class="ch".qos.logback.core.rolling.RollingFileAppender

  !-- 正在记录的日志文件的路径及文件名 --

  file${logDir}/${appName}-debug.${fileType}/file

  !--日志文件输出格式--

  encoder

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

  charsetUTF-8/charset !-- 此处设置字符集 --

  /encoder

  !-- 日志记录器的滚动策略,按日期,按大小记录 --

  rollingPolicy class="ch".qos.logback.core.rolling.TimeBasedRollingPolicy

  !--

  归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。

  而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引

  --

  fileNamePattern${logDir}/${appName}-debug-%d{yyyy-MM-dd}.%i.${fileType}/fileNamePattern

  !--

  除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,

  命名日志文件,例如log-error-2017-04-26.0.log

  --

  timeBasedFileNamingAndTriggeringPolicy class="ch".qos.logback.core.rolling.SizeAndTimeBasedFNATP

  maxFileSize500MB/maxFileSize

  /timeBasedFileNamingAndTriggeringPolicy

  !--日志文件保留天数--

  maxHistory30/maxHistory

  /rollingPolicy

  !-- 此日志文件只记录debug级别的 --

  filter class="ch".qos.logback.classic.filter.LevelFilter

  leveldebug/level

  onMatchACCEPT/onMatch

  onMismatchDENY/onMismatch

  /filter

  /appender

  !-- 时间滚动输出 level为 INFO 日志 --

  appender name=INFO_FILE class="ch".qos.logback.core.rolling.RollingFileAppender

  !-- 正在记录的日志文件的路径及文件名 --

  file${logDir}/${appName}-info.${fileType}/file

  !--日志文件输出格式--

  encoder

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

  charsetUTF-8/charset !-- 此处设置字符集 --

  /encoder

  !-- 日志记录器的滚动策略,按日期,按大小记录 --

  rollingPolicy class="ch".qos.logback.core.rolling.TimeBasedRollingPolicy

  !--

  归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。

  而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引

  --

  fileNamePattern${logDir}/${appName}-info-%d{yyyy-MM-dd}.%i.${fileType}/fileNamePattern

  !--

  除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,

  命名日志文件,例如log-error-2017-04-26.0.log

  --

  timeBasedFileNamingAndTriggeringPolicy class="ch".qos.logback.core.rolling.SizeAndTimeBasedFNATP

  maxFileSize500MB/maxFileSize

  /timeBasedFileNamingAndTriggeringPolicy

  !--日志文件保留天数--

  maxHistory30/maxHistory

  /rollingPolicy

  !-- 此日志文件只记录info级别的 --

  filter class="ch".qos.logback.classic.filter.LevelFilter

  levelinfo/level

  onMatchACCEPT/onMatch

  onMismatchDENY/onMismatch

  /filter

  /appender

  !-- 时间滚动输出 level为 WARN 日志 --

  appender name=WARN_FILE class="ch".qos.logback.core.rolling.RollingFileAppender

  !-- 正在记录的日志文件的路径及文件名 --

  file${logDir}/${appName}-warn.${fileType}/file

  !--日志文件输出格式--

  encoder

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

  charsetUTF-8/charset !-- 此处设置字符集 --

  /encoder

  !-- 日志记录器的滚动策略,按日期,按大小记录 --

  rollingPolicy class="ch".qos.logback.core.rolling.TimeBasedRollingPolicy

  !--

  归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。

  而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引

  --

  fileNamePattern${logDir}/${appName}-warn-%d{yyyy-MM-dd}.%i.${fileType}/fileNamePattern

  !--

  除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,

  命名日志文件,例如log-error-2017-04-26.0.log

  --

  timeBasedFileNamingAndTriggeringPolicy class="ch".qos.logback.core.rolling.SizeAndTimeBasedFNATP

  maxFileSize500MB/maxFileSize

  /timeBasedFileNamingAndTriggeringPolicy

  !--日志文件保留天数--

  maxHistory30/maxHistory

  /rollingPolicy

  !-- 此日志文件只记录warn级别的 --

  filter class="ch".qos.logback.classic.filter.LevelFilter

  levelwarn/level

  onMatchACCEPT/onMatch

  onMismatchDENY/onMismatch

  /filter

  /appender

  !-- 时间滚动输出 level为 ERROR 日志 --

  appender name=ERROR_FILE class="ch".qos.logback.core.rolling.RollingFileAppender

  !-- 正在记录的日志文件的路径及文件名 --

  file${logDir}/${appName}-error.${fileType}/file

  !--日志文件输出格式--

  encoder

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

  charsetUTF-8/charset !-- 此处设置字符集 --

  /encoder

  !-- 日志记录器的滚动策略,按日期,按大小记录 --

  rollingPolicy class="ch".qos.logback.core.rolling.TimeBasedRollingPolicy

  !--

  归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。

  而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引

  --

  fileNamePattern${logDir}/${appName}-error-%d{yyyy-MM-dd}.%i.${fileType}/fileNamePattern

  !--

  除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始,

  命名日志文件,例如log-error-2017-04-26.0.log

  --

  timeBasedFileNamingAndTriggeringPolicy class="ch".qos.logback.core.rolling.SizeAndTimeBasedFNATP

  maxFileSize500MB/maxFileSize

  /timeBasedFileNamingAndTriggeringPolicy

  !--日志文件保留天数--

  maxHistory30/maxHistory

  /rollingPolicy

  !-- 此日志文件只记录ERROR级别的 --

  filter class="ch".qos.logback.classic.filter.LevelFilter

  levelerror/level

  onMatchACCEPT/onMatch

  onMismatchDENY/onMismatch

  /filter

  /appender

  logger name=org.springframework.web level=info/

  logger name=org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor level=INFO/

  !--开发环境:打印控制台--

  springProfile name=dev

  root level=info

  appender-ref ref=CONSOLE/

  appender-ref ref=DEBUG_FILE/

  appender-ref ref=INFO_FILE/

  appender-ref ref=WARN_FILE/

  appender-ref ref=ERROR_FILE/

  /root

  /springProfile

  !--测试环境:打印控制台和输出到文件--

  springProfile name=test

  root level=info

  appender-ref ref=CONSOLE/

  appender-ref ref=INFO_FILE/

  appender-ref ref=WARN_FILE/

  appender-ref ref=ERROR_FILE/

  /root

  /springProfile

  !--生产环境:输出到文件--

  springProfile name=prod

  root level=error

  appender-ref ref=CONSOLE/

  appender-ref ref=DEBUG_FILE/

  appender-ref ref=INFO_FILE/

  appender-ref ref=ERROR_FILE/

  /root

  /springProfile

  /configuration

  5、他有什么功能呢?

  ·日志可以输出到指定文件

  ·日志可以按运行环境进行输出

  ·日志可以按日期进行输出

  ·不同包可以指定不同的输出级别

  

猜你喜欢

转载自www.cnblogs.com/qfdsj/p/9506143.html