默认日志Logback配置


默认日志Logback

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J(Simple Logging Facade For Java)。

  • 与Log4J比较,优点如下:

    • 同样的代码路径,Logback 执行更快
    • 更充分的测试
    • 原生实现了 SLF4J API(Log4J 还需要有一个中间转换层)
    • 内容更丰富的文档
    • 支持 XML 或者 Groovy 方式配置
    • 配置文件自动热加载
    • 从 IO 错误中优雅恢复
    • 自动删除日志归档
    • 自动压缩日志成为归档文件
    • 支持 Prudent 模式,使多个 JVM 进程能记录同一个日志文件
    • 支持配置文件中加入条件判断来适应不同的环境
    • 更强大的过滤器
    • 支持 SiftingAppender(可筛选 Appender)
    • 异常栈信息带有包信息
  • 配置输出的地址和输出级别

    application.properties 中添加如下配置:

      logging.path=/user/local/log
      logging.level.com.favorites=DEBUG
      logging.level.org.springframework.web=INFO
      logging.level.org.hibernate=ERROR
    
    • 日志级别从低到高

        TRACE < DEBUG < INFO < WARN < ERROR < FATAL
      

      如果一个 logger 允许打印一条具有某个日志级别的信息,那么它也必须允许打印具有比这个日志级别更高级别的信息,而不允许打印具有比这个日志级别更低级别的信息。

    • 级别控制

        logging.level.* = LEVEL
      
      • logging.level:日志级别控制前缀,*为包名或Logger名;

      • LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF;

自定义日志配置

根据不同的日志系统,按如下规则组织配置文件名后,将文件放入src/main/resources目录下,可被系统正确加载。

  • 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

使用自定义配置文件名,如logging-config.xml。在application.properties中添加如下配置:

logging.config=classpath:logging-config.xml	

配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
	<contextName>logback</contextName>
	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
	<property name="log.path" value="D:\\log\\logback.log"/>
	<!-- 控制台输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    	<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        	<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        	<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    	</encoder>
	</appender>
	<!-- 输出到文件 -->
	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<file>${log.path}</file>
    	<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        	<!--日志文件输出的文件名-->
        	<FileNamePattern>logback.%d{yyyy-MM-dd}.log</FileNamePattern>
        	<!--日志文件保留天数-->
        	<MaxHistory>30</MaxHistory>
    	</rollingPolicy>
    	<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        	<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
        	<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    	</encoder>
    	<!--日志文件最大的大小-->
    	<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        	<MaxFileSize>10MB</MaxFileSize>
    	</triggeringPolicy>
	</appender>
	<!-- 日志输出级别 -->
	<root level="INFO">
    	<appender-ref ref="STDOUT"/>
    	<appender-ref ref="FILE"/>
	</root>
	<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
	<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE"/>
	<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG"/>
	<logger name="org.hibernate.SQL" level="DEBUG"/>
	<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>
	<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG"/>
	<!--myibatis log configure-->
	<logger name="com.apache.ibatis" level="TRACE"/>
	<logger name="java.sql.Connection" level="DEBUG"/>
	<logger name="java.sql.Statement" level="DEBUG"/>
	<logger name="java.sql.PreparedStatement" level="DEBUG"/>
</configuration>
  • 根节点 <configuration> 包含的属性

    • scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

    • scanPeriod:设置监测配置文件是否有修改的时间间隔。如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效,默认的时间间隔为1分钟。

    • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态,默认值为false。

  • 设置上下文名称 <contextName>

    每个logger都关联到logger上下文,默认上下文名称为 default。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。

  • 设置变量<property>

    用来定义变量值的标签,<property> 有两个属性,namevalue;其中 name 的值是变量的名称,value 的值时变量定义的值。通过 <property> 定义的值会被插入到logger上下文中。定义变量后,可以使 ${} 来使用变量。

  • 子节点 <appender>

    appender用来格式化日志输出节点,有俩个属性nameclassclass用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

    • <encoder> 表示对日志进行格式化编码

      • %d{HH: mm:ss.SSS}——日志输出时间

      • %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用

      • %-5level——日志级别,并且使用5个字符靠左对齐

      • %logger{50}——表示logger名字最长50个字符,否则按照句点分割。

      • %msg——日志消息

      - %n——平台的换行符

  • 子节点<root>

    root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。

    <root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger。

  • 子节点<logger>

    <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。

    • name:用来指定受此logger约束的某一个包或者具体的某一个类。

    • level:用来设置打印级别,大小写无关(TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF),还有一个特俗值 INHERITED 或者同义词 NULL ,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。

    • addtivity:是否向上级logger传递打印信息。默认是true。

 posted on 2018-06-25 16:47  AI.℡  阅读(151)  评论(0编辑  收藏  举报