springboot学习(四) 日志管理

1、简介

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

 2、日志格式

  默认的日志输出格式为:

11 2018-01-20 19:31:23.317 INFO 93864 --- [ main] TestProperties : Starting TestProperties on ith PID 93864 (started by Administrator in 22 2018-01-20 19:31:23.318 INFO 93864 --- [ main] TestProperties : The following profiles are active: dev 33 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 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <configuration debug="false"> 3 3 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> 4 4 <property name="LOG_HOME" value="D:\\日志" /> 5 5 6 6 <!-- 控制台输出 --> 7 7 <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 8 8 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 9 9 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 1010 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 1111 </encoder> 1212 </appender> 1313 1414 <!-- 按照每天生成日志文件 --> 1515 <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> 1616 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 1717 <!--日志文件输出的文件名--> 1818 <FileNamePattern>${LOG_HOME}/spring-error-%d{yyyy-MM-dd}.log</FileNamePattern> 1919 <!--日志文件保留天数--> 2020 <MaxHistory>30</MaxHistory> 2121 </rollingPolicy> 2222 2323 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 2424 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 2525 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 2626 </encoder> 2727 2828 <!--日志文件最大的大小--> 2929 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 3030 <MaxFileSize>100MB</MaxFileSize> 3131 </triggeringPolicy> 3232 3333 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 3434 <level>ERROR</level> 3535 <onMatch>ACCEPT</onMatch> 3636 <onMismatch>DENY</onMismatch> 3737 </filter> 3838 </appender> 3939 4040 <!-- 按照每天生成日志文件 info级别 --> 4141 <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> 4242 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 4343 <!--日志文件输出的文件名--> 4444 <FileNamePattern>${LOG_HOME}/spring-info-%d{yyyy-MM-dd}.log</FileNamePattern> 4545 <!--日志文件保留天数--> 4646 <MaxHistory>30</MaxHistory> 4747 </rollingPolicy> 4848 4949 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 5050 <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 5151 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 5252 </encoder> 5353 5454 <!--日志文件最大的大小--> 5555 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 5656 <MaxFileSize>100MB</MaxFileSize> 5757 </triggeringPolicy> 5858 5959 <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 --> 6060 <level>INFO</level> 6161 <onMatch>ACCEPT</onMatch> 6262 <onMismatch>DENY</onMismatch> 6363 </filter> 6464 </appender> 6565 6666 <!-- show parameters for hibernate sql 专为 Hibernate 定制 --> 6767 <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> 6868 <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> 6969 <logger name="org.hibernate.SQL" level="DEBUG" /> 7070 <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> 7171 <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> 7272 7373 <!--myibatis log configure--> 7474 <logger name="com.apache.ibatis" level="TRACE"/> 7575 <logger name="java.sql.Connection" level="DEBUG"/> 7676 <logger name="java.sql.Statement" level="DEBUG"/> 7777 <logger name="java.sql.PreparedStatement" level="DEBUG"/> 7878 7979 <!--日志打印的包的范围,及分类日志文件存储, 8080 name:记录日志的包 8181 level:记录日志的级别 8282 appender-ref:引用上方设置的appender 8383 --> 8484 <logger name="cn.origal" additivity="false"> 8585 <level value="DEBUG" /> 8686 <appender-ref ref="console"/> 8787 <appender-ref ref="ERROR"/> 8888 <appender-ref ref="INFO" /> 8989 </logger> 9090 9191 <!--必选节点,用来指定最基础的日志输出级别--> 9292 <root level="info"> 9393 <appender-ref ref="console" /> 9494 <appender-ref ref="INFO" /> 9595 </root> 9696 </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