SpringBoot、SpringMVC集成logback日志

水深无声 2022-01-20 15:09 420阅读 0赞

日志主要分为:trace<debug<info<warn<error五种,级别为由低到高

  • trace:主要为程序的追踪,判断程序执行到哪步
  • debug:调试使用的日志输出
  • info:输出一些信息帮助了解程序运行状态
  • warn:程序发出一些警告信息
  • error:程序出错时发出的信息

常用的日志主要分为两种:logback和log4j,都是基于sl4j开发演变而来的,logback更方便使用的人更多,配置里面会有很多坑(生成日志路径…)帮大家避免一下。

前言

项目中我引用lombok包的@Slf4j注解,所以需要输入日志类中不需要再加

  1. Logger log= LoggerFactory.getLogger(getClass());

如果我们没有使用lombok包需要添加代码为:

  1. public class SpringbootApplicationTests {
  2. Logger log= LoggerFactory.getLogger(getClass());
  3. public void loggerInfo() {
  4. log.trace("这是trace");
  5. log.debug("这是debug");
  6. log.info("这是info");
  7. log.warn("这是warn");
  8. log.error("这是error");
  9. }
  10. }

logback.xml内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
  3. <!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
  4. <!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
  5. <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
  6. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  7. <contextName>logback</contextName>
  8. <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
  9. <property name="log.path" value="logs"/>
  10. <!--0. 日志格式和颜色渲染 -->
  11. <!-- 彩色日志依赖的渲染类 -->
  12. <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
  13. <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  14. <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
  15. <!-- 彩色日志格式 -->
  16. <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}}"/>
  17. <!--1. 输出到控制台-->
  18. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  19. <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
  20. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  21. <level>debug</level>
  22. </filter>
  23. <encoder>
  24. <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
  25. <!-- 设置字符集 -->
  26. <charset>UTF-8</charset>
  27. </encoder>
  28. </appender>
  29. <!--2. 输出到文档-->
  30. <!-- 2.1 level为 DEBUG 日志,时间滚动输出 -->
  31. <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  32. <!-- 正在记录的日志文档的路径及文档名 -->
  33. <file>${log.path}/debug.log</file>
  34. <!--日志文档输出格式-->
  35. <encoder>
  36. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  37. <charset>UTF-8</charset>
  38. </encoder>
  39. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  40. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  41. <!-- 日志归档 -->
  42. <fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  43. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  44. <maxFileSize>100MB</maxFileSize>
  45. </timeBasedFileNamingAndTriggeringPolicy>
  46. <!--日志文档保留天数-->
  47. <maxHistory>15</maxHistory>
  48. </rollingPolicy>
  49. <!-- 此日志文档只记录debug级别的 -->
  50. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  51. <level>debug</level>
  52. <onMatch>ACCEPT</onMatch>
  53. <onMismatch>DENY</onMismatch>
  54. </filter>
  55. </appender>
  56. <!-- 2.2 level为 INFO 日志,时间滚动输出 -->
  57. <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  58. <!-- 正在记录的日志文档的路径及文档名 -->
  59. <file>${log.path}/info.log</file>
  60. <!--日志文档输出格式-->
  61. <encoder>
  62. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  63. <charset>UTF-8</charset>
  64. </encoder>
  65. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  66. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  67. <!-- 每天日志归档路径以及格式 -->
  68. <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  69. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  70. <maxFileSize>100MB</maxFileSize>
  71. </timeBasedFileNamingAndTriggeringPolicy>
  72. <!--日志文档保留天数-->
  73. <maxHistory>15</maxHistory>
  74. </rollingPolicy>
  75. <!-- 此日志文档只记录info级别的 -->
  76. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  77. <level>info</level>
  78. <onMatch>ACCEPT</onMatch>
  79. <onMismatch>DENY</onMismatch>
  80. </filter>
  81. </appender>
  82. <!-- 2.3 level为 WARN 日志,时间滚动输出 -->
  83. <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  84. <!-- 正在记录的日志文档的路径及文档名 -->
  85. <file>${log.path}/warn.log</file>
  86. <!--日志文档输出格式-->
  87. <encoder>
  88. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  89. <charset>UTF-8</charset>
  90. </encoder>
  91. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  92. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  93. <fileNamePattern>${log.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  94. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  95. <maxFileSize>100MB</maxFileSize>
  96. </timeBasedFileNamingAndTriggeringPolicy>
  97. <!--日志文档保留天数-->
  98. <maxHistory>15</maxHistory>
  99. </rollingPolicy>
  100. <!-- 此日志文档只记录warn级别的 -->
  101. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  102. <level>warn</level>
  103. <onMatch>ACCEPT</onMatch>
  104. <onMismatch>DENY</onMismatch>
  105. </filter>
  106. </appender>
  107. <!-- 2.4 level为 ERROR 日志,时间滚动输出 -->
  108. <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  109. <!-- 正在记录的日志文档的路径及文档名 -->
  110. <file>${log.path}/error.log</file>
  111. <!--日志文档输出格式-->
  112. <encoder>
  113. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  114. <charset>UTF-8</charset>
  115. </encoder>
  116. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  117. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  118. <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  119. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  120. <maxFileSize>100MB</maxFileSize>
  121. </timeBasedFileNamingAndTriggeringPolicy>
  122. <!--日志文档保留天数-->
  123. <maxHistory>15</maxHistory>
  124. </rollingPolicy>
  125. <!-- 此日志文档只记录ERROR级别的 -->
  126. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  127. <level>ERROR</level>
  128. <onMatch>ACCEPT</onMatch>
  129. <onMismatch>DENY</onMismatch>
  130. </filter>
  131. </appender>
  132. <!-- <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSockerAppender">-->
  133. <!-- <destination></destination>-->
  134. <!-- </appender>-->
  135. <!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 <logger name="org.springframework.web" level="info"/> <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> -->
  136. <!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: 【logging.level.org.mybatis=debug logging.level.dao=debug】 -->
  137. <!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
  138. <!-- 4. 最终的策略 -->
  139. <!-- 4.1 开发环境:打印控制台-->
  140. <springProfile name="dev">
  141. <logger name="com" level="debug"/>
  142. </springProfile>
  143. <root level="info">
  144. <appender-ref ref="CONSOLE"/>
  145. <appender-ref ref="DEBUG_FILE"/>
  146. <appender-ref ref="INFO_FILE"/>
  147. <appender-ref ref="WARN_FILE"/>
  148. <appender-ref ref="ERROR_FILE"/>
  149. </root>
  150. <!-- 4.2 生产环境:输出到文档 <springProfile name="pro"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> <appender-ref ref="WARN_FILE" /> </root> </springProfile> -->
  151. </configuration>

SpringBoot

  • 引用pom依赖

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-logging</artifactId>
    4. </dependency>
  • 通过配置文件使用日志文件

    日志配置

    不指定路径在当前项目下生成日志,值为:G:/springboot.log在G盘下生成

    logging.file=springboot.log

    当前磁盘的根路径创建spring/log文件夹,使用spring.log作为默认文件

    logging.path=/spring/log

    logging.file和logging.path不能同时使用,否则不起作用,一般使用logging.file

    控制台输出日志格式 日期时间,线程名 级别 全类名50个字符 消息和换行

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

    指定文件中输出日志格式

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

  • 使用logback.xml
    把logback.xml放到resources目录下即可
    如果logback.xml位置或名称有变量需要加:

    logging:
    config: classpath:文件名称.xml

日志文件相对保存路径设置可分以下三种:

  • value=”log”输入在项目文件夹下
  • value=”/log”输入在项目文件夹下
  • value=”。。/log”输入在项目上一次文件夹下

SpringMVC

  • 引用pom依赖

    1. <dependency>
    2. <groupId>log4j</groupId>
    3. <artifactId>log4j</artifactId>
    4. <version>1.2.17</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>ch.qos.logback</groupId>
    8. <artifactId>logback-core</artifactId>
    9. <version>1.2.3</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>ch.qos.logback</groupId>
    13. <artifactId>logback-classic</artifactId>
    14. <version>1.2.3</version>
    15. </dependency>
  • 使用logback.xml
    把logback.xml放到resources目录下即可

日志文件相对保存路径设置可分以下三种:

  • value=”log”表示保存到程序运行目录,在tomcat中为bin目录
  • value=”/log”表示保存到系统目录,比如你的项目运行在D盘,这个就在D盘的根目录下。
  • value=”。。/log”表示保存到程序运行目录的父目录,tomacat运行时,有一个logs的目录,最好配置时,加上自己应用名称,以做区分。

关于logback.xml的命名问题

在我们启动tomacat后,会看到日志中有一段内容,如下 :
在这里插入图片描述
可以看到,logback在加载配置时,会先去找名为logback-test.xml,然后找logback.groovy,最后找logback.xml,如果找到就会应用我们的配置。如果未找到,就默认配置。
如果我们不想用logback.xml这个名称,例如使用logback-spring.xml,我们可以在项目的web.xml里面配置
pom文件引用

  1. <dependency>
  2. <groupId>org.logback-extensions</groupId>
  3. <artifactId>logback-ext-spring</artifactId>
  4. <version>0.1.4</version>
  5. </dependency>

web.xml

  1. <context-param>
  2. <param-name>logbackConfigLocation</param-name>
  3. <param-value>classpath:logback-spring.xml</param-value>
  4. </context-param>
  5. <listener>
  6. <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
  7. </listener>

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读

    相关 logback

    没有使用logback,只使用了Simple Logging Facade for Java (SLF4J) Java的简单日志记录外观(SLF4J)可作为各种日志记录框架