欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot日志控制详解

程序员文章站 2024-04-02 08:12:28
spring boot对日志的处理,和我们平时的日志处理完全一致,通过logback.xml进行日志管理功能。为了简便,这里采用“spring boot构建框架”一章节使用...

spring boot对日志的处理,和我们平时的日志处理完全一致,通过logback.xml进行日志管理功能。为了简便,这里采用“spring boot构建框架”一章节使用的工程,讲述如何在spring boot中处理日志。

第一步,虽然spring boot中application.properties配置文件提供了日志的配置,但是个人更倾向于旧的配置方式。在src/main/resources目录中增加logback.xml日志文件,文件内容如下(配置相对简单,个人请根据工程情况,进行相应的配置):

<configuration scan="true" scanperiod="10 seconds">
  <include resource="org/springframework/boot/logging/logback/base.xml" />

  <appender name="info_file" class="ch.qos.logback.core.rolling.rollingfileappender">
    <file>${log_path}/info.log</file>
    <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy">
      <filenamepattern>${log_path}/info-%d{yyyymmdd}.log.%i
      </filenamepattern>
      <timebasedfilenamingandtriggeringpolicy class="ch.qos.logback.core.rolling.sizeandtimebasedfnatp">
        <maxfilesize>500mb</maxfilesize>
      </timebasedfilenamingandtriggeringpolicy>
      <maxhistory>2</maxhistory>
    </rollingpolicy>
    <layout class="ch.qos.logback.classic.patternlayout">
      <pattern>%d{yyyy-mm-dd hh:mm:ss.sss} [%thread] %-5level %logger{36} -%msg%n
      </pattern>
    </layout>
  </appender>

  <appender name="error_file" class="ch.qos.logback.core.rolling.rollingfileappender">
    <filter class="ch.qos.logback.classic.filter.thresholdfilter">
      <level>error</level>
    </filter>
    <file>${log_path}/error.log</file>
    <rollingpolicy class="ch.qos.logback.core.rolling.timebasedrollingpolicy">
      <filenamepattern>${log_path}/error-%d{yyyymmdd}.log.%i
      </filenamepattern>
      <timebasedfilenamingandtriggeringpolicy class="ch.qos.logback.core.rolling.sizeandtimebasedfnatp">
        <maxfilesize>500mb</maxfilesize>
      </timebasedfilenamingandtriggeringpolicy>
      <maxhistory>2</maxhistory>
    </rollingpolicy>
    <layout class="ch.qos.logback.classic.patternlayout">
      <pattern>%d{yyyy-mm-dd hh:mm:ss.sss} [%thread] %-5level %logger{36} -%msg%n

      </pattern>
    </layout>
  </appender>
  
  <logger name="com.example" level="debug">  
    <appender-ref ref="baselog" />  
  </logger>
  
  <root level="info">
    <appender-ref ref="info_file" />
    <appender-ref ref="error_file" />
  </root>
  
</configuration>

注意:

1)控制台和日志文件的字符集
2)日志文件的存放位置,须要遵守linux的命名规则

第二步,在application.properties中指定logback.xml和日志生成的路径,如下:

logging.config=classpath:logback.xml
logging.path=/workspace/log

第三步,新建hellocontroller类,具体内容如下:

package com.example; 
 
import org.slf4j.logger; 
import org.slf4j.loggerfactory; 
import org.springframework.web.bind.annotation.pathvariable; 
import org.springframework.web.bind.annotation.requestmapping; 
import org.springframework.web.bind.annotation.restcontroller; 
 
@restcontroller 
public class hellocontroller { 
 
  protected static logger logger=loggerfactory.getlogger(hellocontroller.class); 
   
  @requestmapping("/") 
  public string helloworld(){ 
    logger.debug("访问hello"); 
    return "hello world!"; 
  } 
   
  @requestmapping("/hello/{name}") 
  public string helloname(@pathvariable string name){ 
    logger.debug("访问 helloname,name={}",name); 
    return "hello "+name; 
  } 
}

注意:在添加引用时,日志的包一定是org.slf4j.logger、org.slf4j.loggerfactory类。

第四步,测试

1)运行主程序
2)在浏览器中依次输入
http://localhost:8080/
http://localhost:8080/hello/素文宅博客
3)由于我的工程在d盘所有log日志文件所在的目录找到d:/workspace/log文件夹下,日志文件的名称是在配置文件logback.xml中设置的。

application.properties可以配置日志相关属性

控制台输出

日志级别从低到高分为trace < debug < info < warn < error < fatal,如果设置为warn,则低于warn的信息都不会输出。

spring boot中默认配置error、warn和info级别的日志输出到控制台。您还可以通过启动您的应用程序--debug标志来启用“调试”模式(开发的时候推荐开启),以下两种方式皆可:
1)在运行命令后加入--debug标志,如:$ java -jar springtest.jar --debug
2)在application.properties中配置debug=true,该属性置为true的时候,核心logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为debug级别。

文件输出

默认情况下,spring boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.filelogging.path属性。
1)logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
2)logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
如果只配置logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log

注意:二者不能同时使用,如若同时使用,则只有logging.file生效。默认情况下,日志文件的大小达到10mb时会切分一次,产生新的日志文件,默认级别为:error、warn、info。

级别控制

所有支持的日志记录系统都可以在spring环境中设置记录级别(在application.properties中设置)
格式为:'logging.level.* = level'
logging.level:日志级别控制前缀,*为包名或logger名
level:选项trace, debug, info, warn, error, fatal, off

实例:

logging.level.com.dudu=debug:com.example包下所有class以debug级别输出
logging.level.root=warn:root日志以warn级别输出

自定义日志配置

由于日志服务一般都在applicationcontext创建前就初始化了,它并不是必须通过spring的配置文件控制。因此通过系统属性和传统的spring boot外部配置文件依然可以很好的支持日志控制和管理。

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

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特有的配置项。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。