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、他有什么功能呢?  ·日志可以输出到指定文件  ·日志可以按运行环境进行输出  ·日志可以按日期进行输出  ·不同包可以指定不同的输出级别  ​ 

相关内容推荐