logback常用配置

一、logback概述

1、系统中的logger是按照包路径建立的一个树状结构,root为根节点,子logger会继承root根logger的配置,子logger也可单独配置,和root不一样的日志策略和级别。

2、日志重要级别按 error => warn =>info => debug =>trace 排序,若日志级别定义为warn,则记录error、warn两级的日志

二、配置步骤

1)添加依赖
<dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.5</version>
</dependency>
<dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-core</artifactId>
          <version>1.1.7</version>
</dependency>
<dependency>  
	  <groupId>ch.qos.logback</groupId>  
	  <artifactId>logback-classic</artifactId>  
	  <version>1.1.7</version>  
</dependency>
2)创建配置文件

在代码根目录创建名称为logback.xml的配置文件

3)编写配置文件

1、添加根节点

<configuration scan="true" scanPeriod="60 seconds" debug="true">
  • scan="true" 告诉logback需要扫描配置文件,根据变动更新配置

  • scanPeriod="60 seconds" 与第一个参数配合使用,每60s扫描一次

  • debug="true" 设置为true,logback打印本身框架跟踪信息,如:

    debug="true"

    1.the configuration file is found 配置文件找到<br /> 2.the configuration file is well-formed XML. 配置文件格式正确

2、添加日志根路径参数

<property name="LOG_HOME" value="${catalina.base}/logs" />

${catalina.base}会被自动替换成tomcat的根路径。这里创建的LOG_HOME可在配置文件中以${LOG_HOME}方式使用

3、添加appender

这里针对root根logger配置了info、warn、error配置了3个等级的appender。针对其中一个子logger配置了一个name=“FILE_INFO_SPECIFY”的appender。意图展示对项目里不同包、类与项目整体日志的差异化配置。

<appender name="FILE_ERROR"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/error/error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/error/error-%d{yyyy-MM-dd}-%i.log.gz
			</fileNamePattern>
			<maxHistory>3</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
		</encoder>
</appender>
<appender name="FILE_WARN"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/warn/warn.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/warn/warn-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<maxHistory>180</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
				%msg%n</pattern>
		</encoder>
</appender>
<appender name="FILE_INFO"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/info/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/info/info-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<maxHistory>180</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
				%msg%n</pattern>
		</encoder>
</appender>
<appender name="FILE_INFO_SPECIFY"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/info2/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/info2/info-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<maxHistory>180</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
				%msg%n</pattern>
		</encoder>
</appender>

4、配置root

<root level="warn">
	<appender-ref ref="FILE_INFO" />
	<appender-ref ref="FILE_WARN" />
	<appender-ref ref="FILE_ERROR" />
</root>

root的level配置为warn,也就意味着warn、error两个appender会工作,而info这个appender不会工作。

5、配置单个logger(可选)

<logger name="com.xxx.AnotherController" 
		level="info" additivity="false">
	<appender-ref ref="FILE_INFO_2" />
</logger>

针对com.xxx.AnotherController这个类配置level和appender,<appender-ref>节点将name为FILE_INFO_2的appender关联到这个logger。additivity属性设为false,表示不继承父logger的level和appender配置,默认为true。

####4)配置完毕,在项目中使用

private final Logger logger = LoggerFactory.getLogger(AnotherController.class);

这里的AnotherController.class对应着配置里的com.xxx.AnotherController。没有考察,这里应该是根据AnotherController.class的全路径名去找对应的logger。

logger.info("another info");

${catalina.base}/logs/info2/info.log 文件里输出

2016-11-04 11:05:58.359 [http-bio-8080-exec-1] INFO  com.xxx.controller.AnotherController -
				another info

三、完整的logback.xml

<!-- 配置文件根节点,scan设为true,响应配置文件的变化;scanPeriod设为60 seconds,
每60s检查一次变化,debug="false"表示logback本身的debug日志不记录
 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

	<!-- 日志文件根路径 -->
	<property name="LOG_HOME" value="${catalina.base}/logs" />

	<!-- 控制台输出appender配置 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>
	
	<!-- 项目error级日志输出appender配置 
	ch.qos.logback.core.rolling.RollingFileAppender 为常用appender
	当日志大小超过策略后,将文件内容转储到指定文件
	-->
	<appender name="FILE_ERROR"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<!-- 工作文件路径  -->
		<file>${LOG_HOME}/error/error.log</file>
		<!-- 转储策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 转储文件路径,路径后加.gz或.zip,在转储后压缩 -->
			<fileNamePattern>${LOG_HOME}/error/error-%d{yyyy-MM-dd}-%i.log.gz
			</fileNamePattern>
			<!-- 最多保留文件数,系统保留最新的文件,超过该数量的删除 -->
			<maxHistory>3</maxHistory>
			<!-- 超过100MB或跨天后转储 -->
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
		    <!-- 日志格式 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
		</encoder>
	</appender>
	<appender name="FILE_WARN"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/warn/warn.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/warn/warn-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<maxHistory>180</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
				%msg%n</pattern>
		</encoder>
	</appender>
	
	<appender name="FILE_INFO"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/info/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/info/info-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<maxHistory>180</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
				%msg%n</pattern>
		</encoder>
	</appender>
	
	<appender name="FILE_INFO_SPECIFY"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<file>${LOG_HOME}/info2/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/info2/info-%d{yyyy-MM-dd}-%i.log
			</fileNamePattern>
			<maxHistory>180</maxHistory>
			<TimeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<MaxFileSize>100MB</MaxFileSize>
			</TimeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
				%msg%n</pattern>
		</encoder>
	</appender>
	
	<!-- 根logger,记录warn级别以上的日志 -->
	<root level="warn">
		<!-- root logger关联的appender -->
		<appender-ref ref="FILE_INFO" />
		<appender-ref ref="FILE_WARN" />
		<appender-ref ref="FILE_ERROR" />
	</root>
	
	<!-- com.xxx.controller.AnotherController logger,记录info级别以上的日志
	   additivity="false",不继承root的appender
	 -->
	<logger name="com.xxx.controller.AnotherController" 
		level="info" additivity="false">
		<appender-ref ref="FILE_INFO_2" />
	</logger>
	   
</configuration>  

转载于:https://my.oschina.net/allendong/blog/781291

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值