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.file或logging.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特有的配置项。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。