springboot学习(四) 日志管理

Easter79
• 阅读 608

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>
    

    日志记录方式:

           springboot学习(四) 日志管理

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Log4j
一、log4J的使用步骤1配置文件log4j需要使用配置文件进行配置,共两种方式,一种为properties文件,一种为xml文件。Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Stella981 Stella981
2年前
Spring boot——logback 基础使用篇(一)
1简单日志配置springboot内部使用CommonsLogging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如JavaUtilLogging,Log4J2还有Logback。如果你想用某一种日志框架来进行实现的话,就必须先配置,默认情况下,springboot使用Logback作为日志实现的框架。1
Stella981 Stella981
2年前
Logstash收集nginx访问日志和错误日志
1、收集访问日志1)、首先是要在nginx里面配置日志格式化输出log_formatmain"$http_x_forwarded_for|$time_local|$request|$status|$body_bytes_sent|$request_body|$content_length|$http_ref
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k