SpringBoot使用日志

Posted johnericcheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot使用日志相关的知识,希望对你有一定的参考价值。

1、日志框架

日志门面日志实现
JCL、SLF4J、jboss-logging Log4j、JUL、Log4j2、Logback

日志门面:SLF4J

日志实现:Logback

SpringBoot:底层是Spring框架,Spring框架默认是用JCL;

SpringBoot选用SLF4J和Logback.

2、SLF4J使用

以后开发的时候,日志记录。日志记录方法的调用,不应直接调用日志的实现类,而是调用日志抽象层的方法。

应该给系统里倒入slf4j的jar和logback的实现jar。

1   import org.slf4j.Logger;
2   import org.slf4j.LoggerFactory;
3   ?
4   public class HelloWorld {
5     public static void main(String[] args) {
6       Logger logger = LoggerFactory.getLogger(HelloWorld.class);
7       logger.info("Hello World");
8     }
9   }

技术图片

每一个日志的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框自己本身的配置文件

3、遗留问题

框架A:

(slf4j+logback):Spring(commons-logging)、Hibernate(jboss-logging)、Mybatis、xxx

统一:统一使用slf4j+logback

技术图片

如何让系统中的日志统一到slf4j:

1、将系统中的其它日志框架先排除出去

2、用中间包来替换所有的日志框架

3、我们倒入slf4j的其它实现

 

日志级别:

trace > debug > info > warn > error

 

The following example shows potential(默认的、潜在的) logging settings in application.properties:

1   logging.level.root=WARN
2   logging.level.org.springframework.web=DEBUG
3   logging.level.org.hibernate=ERROR

 

日志在yml中的相关配置:

 logging.level.com.itcast=info
 logging.path=日志保存的位置
 logging.file=D:/logging.log 日志的文件包含路径
 logging.pattern.console=console: %d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n 控制台输出日志的格式
 logging.pattern.file: %d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n 在指定文件中日志输出格式

 

logging.filelogging.pathExampleDescription
(none) (none)   Console only logging.
Specific file (none) my.log Writes to the specified log file. Names can be an exact location or relative to the current directory.
(none) Specific directory /var/log Writes spring.log to the specified directory. Names can be an exact location or relative to the current directory.

 

Depending on your logging system, the following files are loaded:

使用springboot加载不同方式的日志实现方式,需要使用的配置文件名称如下,存放位置在项目根目录下举例logback.xml

Logging SystemCustomization
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.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2   <!--
 3   scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
 4   scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。
 5   debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
 6   -->
 7   <configuration scan="false" scanPeriod="60 seconds" debug="false">
 8       <!-- 定义日志的根目录 -->
 9       <property name="LOG_HOME" value="/app/log" />
10       <!-- 定义日志文件名称 -->
11       <property name="appName" value="atguigu-springboot"></property>
12       <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 -->
13       <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
14           <!--
15           日志输出格式:
16               %d表示日期时间,
17               %thread表示线程名,
18               %-5level:级别从左显示5个字符宽度
19               %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
20               %msg:日志消息,
21               %n是换行符
22           -->
23           <layout class="ch.qos.logback.classic.PatternLayout">
24               <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
25           </layout>
26       </appender>
27   ?
28       <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->  
29       <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
30           <!-- 指定日志文件的名称 -->
31           <file>${LOG_HOME}/${appName}.log</file>
32           <!--
33           当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名
34           TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。
35           -->
36           <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
37               <!--
38               滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 
39               %i:当文件大小超过maxFileSize时,按照i进行文件滚动
40               -->
41               <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
42               <!-- 
43               可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动,
44               且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是,
45               那些为了归档而创建的目录也会被删除。
46               -->
47               <MaxHistory>365</MaxHistory>
48               <!-- 
49               当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy
50               -->
51               <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
52                   <maxFileSize>100MB</maxFileSize>
53               </timeBasedFileNamingAndTriggeringPolicy>
54           </rollingPolicy>
55           <!-- 日志输出格式: -->     
56           <layout class="ch.qos.logback.classic.PatternLayout">
57               <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n</pattern>
58           </layout>
59       </appender>
60   ?
61       <!-- 
62           logger主要用于存放日志对象,也可以定义日志类型、级别
63           name:表示匹配的logger类型前缀,也就是包的前半部分
64           level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR
65           additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,
66           false:表示只用当前logger的appender-ref,true:
67           表示当前logger的appender-ref和rootLogger的appender-ref都有效
68       -->
69       <!-- hibernate logger -->
70       <logger name="com.atguigu" level="debug" />
71       <!-- Spring framework logger -->
72       <logger name="org.springframework" level="debug" additivity="false"></logger>
73   ?
74   ?
75   ?
76       <!-- 
77       root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应,
78       要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。 
79       -->
80       <root level="info">
81           <appender-ref ref="stdout" />
82           <appender-ref ref="appLogAppender" />
83       </root>
84   </configuration> 

 

You need to either use logback-spring.xml or define a logging.config property.

使用logging-spring.xml这种方式,可以根据不同配置环境配置日志的输出方式。

 1  <springProfile name="staging">
 2       <!-- configuration to be enabled when the "staging" profile is active -->
 3   </springProfile>
 4   ?
 5   <springProfile name="dev, staging">
 6       <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
 7   </springProfile>
 8   ?
 9   <springProfile name="!production">
10       <!-- configuration to be enabled when the "production" profile is not active -->
11   </springProfile>

案例:

1 <layout class="ch.qos.logback.classic.PatternLayout">
2      <springProfile name="dev">
3           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
4       </springProfile>
5   </layout>

 --------------------------------------------------------------------------------------------------------------------------------------------------------

相关文档网页支持:

1 1、https://docs.spring.io/spring-boot/docs/1.5.20.RELEASE/reference/htmlsingle/#howto-logging
3 2、https://www.slf4j.org/manual.html
5 3、https://www.slf4j.org/legacy.html

以上是关于SpringBoot使用日志的主要内容,如果未能解决你的问题,请参考以下文章

argparse 代码片段只打印部分日志

webstorm代码片段的创建

SpringBoot启动报错“Consider defining a bean of type ‘xxx.mapper.UserMapper‘ in your configuration.“(代码片段

Spring boot:thymeleaf 没有正确渲染片段

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

SpringBoot实战 之 接口日志篇