4.springboot 与日志

学习记录,仅供参考

异步输出

自动归档

日志级别:

  • 所有支持的日志系统可以在springboot设置的记录器级别Environment(例如,application.properties通过使用)logging.level.=,其中level为TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一。该root记录器可以通过使用被配置logging.level.root。

以下示例显示了中的潜在日志记录设置application.properties:

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

也可以使用环境变量来设置日志记录级别。例如,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG将设置org.springframework.web为DEBUG。

日志门面(日志的抽象层):

JCL(Jakarta commons logging) SLF4J(simple logging facade for java) jboss-logging
日志实现:log4j JUL(java,util.logging) log4j2 logback
使用:选择一个日志门面以及一个日志实现.例如slf4j 和 logback,
SpringBoot使用的是JCL,SpringBoot默认使用的是SLF4J和logback;

使用过程

pom


           org.springframework.boot
            spring-boot-starter-logging
 

code

    Logger logger = LoggerFactory.getLogger(StudyController.class);
 @GetMapping("/testmyConfiguration")
    public String getTest1()
    {
        logger.trace("trade 級別1");
        logger.debug("debug 級別2");
        logger.info("info 級別3");
        logger.warn("warn 級別4");
        logger.error("error 級別5");
        return testProperties.getName();
    }

配置

我们可以在application.properties中指定日志的级别,需要加上当前的包名和类名,
例如logging.level.com.study=trace
  默认配置:
  logging.file     logging.path    example    description
  none        none                只在控制台输出
  指定文件名      none        my.log      日志输出到my.log文件中
  none        指定目录      /var/log     输出当指定目录的spring.log文件中

#指定当前类的日志级别
 2 logging.level.com.skukuqi=trace
 3 #当前项目下生成日志
 4 #logging.file=mylog.log
 5 #指定路径
 6 #logging.file=C:/Users/Administrator/Desktop/mylog.log
 7 #指定目录
 8 logging.path=C:/spring/log
 9 #指定在控制台输出的日志的格式 默认:时间 级别 线程ID --- 主线程  全类名 :内容 -5level 级别从左显示5个宽度
10 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} -%msg%n
11 #指定文件中日志输出的格式
12 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} === [%thread] === %-5level === %logger{50} === %msg%n

指定日志文件和日志profile功能(待学习)

在类路径下放上每个日志框架自己的配置文件即可,SpringBoot就不使用他默认的自动配置了.以下给出默认配置的修改命名规范

  • Logback: logback-spring.xml logback-spring.groovy logback.xml logback.groovy
  • Log4j2 : log4j2-spring.xml log4j2.xml
  • jdk java util logging : logging.properties

profile 功能:

logback.xml:直接就被日志框架识别了.
logback-spring.xml:日志框架不会直接识别,有springBoot加载,这样就可以使用到springProfile标签某段配置只在某个环境中生效


    



    



    

logback.xml:

 1 
 7 
 8     
 9     
10     
11     
12     
13     
14         
22         
23             
24                 %d{HH:mm:ss} --- [%thread] --- %-5level %logger{36} - %msg%n
25             
26             
27                 %d{HH:mm:ss} === [%thread] === %-5level %logger{36} - %msg%n
28             
29         
30     
31     
32     
33         10MB
34     
35     
36     
37         
38     
39 

切换日志框架

日志门面SLFJ + 具体实现(SLFJ集成相应的jar,以集成其他日志框架系统)
当你需要替换其他日志框架,只需要去掉其他日志包,引入对应springboot的日志starter

slf4j支持日志.png

看spring-boot-start-logging 底层的依赖为logback-classic,log4j-to-slf4j,jul-to-slf4j,所以有相应的日志集成包,同一由slf4j 日志门面调用


            org.springframework.boot
            spring-boot-starter-logging
        

    
      ch.qos.logback
      logback-classic
      1.2.3
      compile
    
    
      org.apache.logging.log4j
      log4j-to-slf4j
      2.12.1
      compile
    
    
      org.slf4j
      jul-to-slf4j
      1.7.30
      compile
    
  

使用logback使用需要和slf4j一起使用,所以总共需要添加依赖的包有slf4j-api.jar,logback-core.jar,logback-classic.jar,logback-access.jar这个暂时用不到所以不添加依赖了
看springboot依赖:


image.png

image.png

jul-to-slf4j&log4j-to-slf4j:
slf4j:https://blog.csdn.net/yangzl2008/article/details/81503579

image.png
image.png
image.png

image.png

转换图:


image.png

实现:
如何让系统中所有的日志都统一到slf4j

1.将系统中其他日志框架先排除出去
2.用中间包来替换原有的日志框架;
3.我们导入slf4j其他的实现

  • logback
    logback详细介绍 https://www.cnblogs.com/warking/p/5710303.html
    springboot使用logback.xml文件
    image.png

    file1:logback

    



    
    








        
            %date [%thread] %-5level %logger{36} - %msg%n
        
    

    
        ${Lance.HOME}/logs/cs4DomSsm/cs4DomSsm-gvvmcAssociateVoyage.log

        
            ${Lance.HOME}/logs/cs4DomSsm/cs4DomSsm-gvvmcAssociateVoyage.log.%i
            1
            10
        
        
        
            50MB
        
        
            %date [%thread] %-5level %logger{36} - %msg%n
        
    

    
    
        
    

   
    
            
        

file2:logback



   
   
    
    
        %d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n
    
    
    
      
      WARN
      
      ACCEPT
      
      DENY
    
  
  
   
  
     
    logs/error.log
    
    
        %d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n
    
    
    
      
      ERROR
      
      ACCEPT
      
      DENY
    
    
    
      
      error.%d{yyyy-MM-dd}.log
      
      30
    
  
  
  
  
    
    
  

详细file3:logback





    
    
    
    
    ${APP_Name}
    
    
    
    
        
        
            %date [%thread] %-5level %logger{36} - %msg%n
        
        
        
            
            ERROR
            
            ACCEPT
            
            DENY
        
    

    
    
    
        
        
        
        
        
        
        ${APP_Name}/logs/error.log
        
        
            %date [%thread] %-5level %logger{36} - %msg%n
        

        
        
        
        
        
        
        
        
        

        

                
                    ${APP_Name}/logs/error.log.%i
                    1
                    5
                
                
                    5MB
                


        







    

    
    
        
        
    
    

    
        
        
        
    

    
    
    
    
    
    

    
    
    
    
    


切换使用 log4j

1.更改pom文件:
在创建 SpringBoot 工程时,我们引入了 spring-boot-starter,其中包含了 spring-boot-starter-logging ,该依赖内容就是 SpringBoot 默认的日志框架 Logback ,所以我们在引入 log4j 之前,需要先排除该包的依赖,再引入 log4j 的依赖。


    org.springframework.boot
    spring-boot-starter
    
        
            org.springframework.boot
            spring-boot-starter-logging
        
    


    org.springframework.boot
    spring-boot-starter-log4j

之后我们可以使用 application.properties,其中的配置项之前有说,同样也是适用 Log4J 的。
如果需要更高级的配置选择,必须要添加 Log4j 的配置文件了。我们在 classpath 的 resources下新建 log4j.properties 文件,这里简单示例一下:

# 日志级别,日志追加程序列表...
log4j.rootLogger=DEBUG,ServerDailyRollingFile,stdout
#文件保存日志
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
#文件保存日志日期格式
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd_HH
#文件保存日志文件路径
log4j.appender.ServerDailyRollingFile.File=/mnt/lunqi/demo/log4j.log
#文件保存日志布局程序
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
#文件保存日志布局格式
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
#文件保存日志需要向后追加(false是测试的时候日志文件就清空,true的话就是在之前基础上往后写)
log4j.appender.ServerDailyRollingFile.Append=false
#控制台日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#控制台日志布局程序
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#控制台日志布局格式
log4j.appender.stdout.layout.ConversionPattern=%d yyyy-MM-dd HH:mm:ss %p [%c] %m%n

切换使用 log4j 引用于 作者:Lunqi
链接:https://www.jianshu.com/p/969e47cefa78

总结:

  • springboot 默认使用SLF4J + logback
  • 日志文件会在10Mb大小的时候被截断,产生新的日志文件,默认级别为:ERROR、WARN、INFO,并且与控制台输出一样,默认情况下会记录ERROR-level,WARN-level和INFO-level消息。可以使用该logging.file.max-size属性更改大小限制。除非logging.file.max-history已设置该属性,否则默认情况下将保留最近7天的轮转日志文件。日志档案的总大小可以使用设置上限logging.file.total-size-cap。当日志归档的总大小超过该阈值时,将删除备份。要在应用程序启动时强制清除日志存档,请使用该logging.file.clean-history-on-start属性
  • SpringBoot也把其他的日志都替换成了slf4j;
  • 如果我们要引入其他的框架,一定要把这个框架的默认日志依赖移除掉.
    使用介绍:https://blog.csdn.net/Stitch__/article/details/88377310
    日志管理:https://www.jianshu.com/p/969e47cefa78
    logback 官方文档: http://logback.qos.ch/documentation.html

学习记录中......

你可能感兴趣的:(4.springboot 与日志)