zoukankan      html  css  js  c++  java
  • 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>

      日志记录方式:

               

  • 相关阅读:
    pexpect库学习之包装类详解
    spawn类expect方法详解
    spawn类参数command详解
    Django中如何实现数据库路由?
    Memcached中的存取命令详解
    Javascript的参数详解
    Python中Paramiko协程方式详解
    Greenlets间如何实现互相通信?
    Gevent中的同步与异步详解
    jQuery正则的使用方法步骤详解
  • 原文地址:https://www.cnblogs.com/origalom/p/8321796.html
Copyright © 2011-2022 走看看