springboot学习(四) 日志管理

1、简介

  Spring Boot内部日志系统使用的是Commons Logging,但开放底层的日志实现。默认为会Java Util Logging, Log4J, Log4J2和Logback提供配置。每种情况下都会预先配置使用控制台输出,也可以使用可选的文件输出。

 2、日志格式

  默认的日志输出格式为:

1 2018-01-20 19:31:23.317 INFO 93864 --- [ main] TestProperties : Starting TestProperties on ith PID 93864 (started by Administrator in 2 2018-01-20 19:31:23.318 INFO 93864 --- [ main] TestProperties : The following profiles are active: dev 3 2018-01-20 19:31:23.429 INFO 93864 --- [ main] o.s.w.c.s.GenericWebApplicationContext : Refreshing org.springframework.web.context.support.GenericWebApplicationContext@368f2016: startup date [Sat Jan 20 19:31:23 CST 2018]; root of context hierarchy

  节点输出包括:

  • 日期和时间:精确到毫秒
  • 日志级别:ERROR, WARN, INFO, DEBUG, TRACE
  • process ID  
  • 分隔符---: 标识日志信息开头
  • 线程名 - 包括在方括号中(控制台输出可能会被截断)
  • 日志名 - 通常是源class的类名(缩写)
  • 日志信息

3、控制台输出

  在spring boot中默认配置了ERROR, WARN, INFO级别的信息输出到控制台。

  开启控制台的DEBUG级别日志记录方法:

  (1)通过 --debug  标识,如:java -jar myapp.jar --debug

  (2)在application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

4、文件输出

  默认情况下,spring boot日志只会输出到控制台,而不会写进日志文件,如果需要增加输出到日志文件,则需要在配置文件中添加logging.file活logging.path属性。配置组合结果:

logging.file

logging.path

示例

描述

 

 

 

只记录到控制台

文件

 

my.log

写到特定的日志文件里,名称可以是一个精确的位置或相对于当前目录

 

目录

/var/log

写到特定文件夹下的spring.log里,名称可以是一个精确的位置或相对于当前目录

  日志文件每达到10M会进行分割。

  如果logging.file和logging.path都配置了,那么只会以file配置的为准。

5、日志级别控制

  可以在配置文件中配置日志记录什么级别的日志。设置方法: 'logging.level.*=LEVEL'('LEVEL'是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF中的一个, *为包名或logger名)

  例子:

  logging.level.org.springframework.web: DEBUG  : org.springframework.web包下所有class以DEBUG级别输出

  logging.level.root=WARN:root日志以WARN级别输出

6、自定义日志

  Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml)。根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  • 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.propertie

    1 <?xml version="1.0" encoding="UTF-8"?> 2 <configuration debug="false"> 3 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> 4 <property name="LOG_HOME" value="D:\\日志" /> 5 6 <!-- 控制台输出 --> 7 <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 8 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 9 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 10 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 11 </encoder> 12 </appender> 13 14 <!-- 按照每天生成日志文件 --> 15 <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> 16 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 17 <!--日志文件输出的文件名--> 18 <FileNamePattern>${LOG_HOME}/spring-error-%d{yyyy-MM-dd}.log</FileNamePattern> 19 <!--日志文件保留天数--> 20 <MaxHistory>30</MaxHistory> 21 </rollingPolicy> 22 23 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 24 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 25 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 26 </encoder> 27 28 <!--日志文件最大的大小--> 29 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 30 <MaxFileSize>100MB</MaxFileSize> 31 </triggeringPolicy> 32 33 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 34 <level>ERROR</level> 35 <onMatch>ACCEPT</onMatch> 36 <onMismatch>DENY</onMismatch> 37 </filter> 38 </appender> 39 40 <!-- 按照每天生成日志文件 info级别 --> 41 <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> 42 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 43 <!--日志文件输出的文件名--> 44 <FileNamePattern>${LOG_HOME}/spring-info-%d{yyyy-MM-dd}.log</FileNamePattern> 45 <!--日志文件保留天数--> 46 <MaxHistory>30</MaxHistory> 47 </rollingPolicy> 48 49 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 50 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 51 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 52 </encoder> 53 54 <!--日志文件最大的大小--> 55 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 56 <MaxFileSize>100MB</MaxFileSize> 57 </triggeringPolicy> 58 59 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 60 <level>INFO</level> 61 <onMatch>ACCEPT</onMatch> 62 <onMismatch>DENY</onMismatch> 63 </filter> 64 </appender> 65 66 <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> 67 <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> 68 <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> 69 <logger name="org.hibernate.SQL" level="DEBUG" /> 70 <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> 71 <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> 72 73 <!--myibatis log configure--> 74 <logger name="com.apache.ibatis" level="TRACE"/> 75 <logger name="java.sql.Connection" level="DEBUG"/> 76 <logger name="java.sql.Statement" level="DEBUG"/> 77 <logger name="java.sql.PreparedStatement" level="DEBUG"/> 78 79 <!--日志打印的包的范围,及分类日志文件存储, 80 name:记录日志的包 81 level:记录日志的级别 82 appender-ref:引用上方设置的appender 83 --> 84 <logger name="cn.origal" additivity="false"> 85 <level value="DEBUG" /> 86 <appender-ref ref="console"/> 87 <appender-ref ref="ERROR"/> 88 <appender-ref ref="INFO" /> 89 </logger> 90 91 <!--必选节点,用来指定最基础的日志输出级别--> 92 <root level="info"> 93 <appender-ref ref="console" /> 94 <appender-ref ref="INFO" /> 95 </root> 96 </configuration>

    日志记录方式:

           

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0