logback简介

  • Logback是由log4j创始人设计的一个开源日志组件。LogBack被分为3个组件,logback-core, logback-classic 和 logback-access。

      	logback-core是其它两个模块的基础模块。
      	logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
      	logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
    

logback中的logger、appender、layout

  • logger:作为日志的记录器,把它关联到对应的context后,主要用于存放日志对象,也可以定义日志类型,级别。 logger 存放日志对象,关注哪个地方的日志,属性additivity为true时,将父类(root)中的appender-ref继承,且不是按照root的level,且一个类只能对应一个logger
  • appender:设置输出媒介以及输出路径 ,主要用于指定日志输出的目的地。目的地可以是控制台,文件,远程套接字服务器,数据库mysql等。
  • layout:负责把时间转换成字符串,格式化日志信息的输出。(encoder的功能类似于layout,layout仅仅完成一个event事件转换为一组字符串 encoder除了将evnet事件转换为byte数组,也会将日志输出到相应的文件中)

logback的日志级别

错误级别:TRACE<DEBUG<INFO<WARN<ERROR 定义log.level为debug 只显示DEBUG 和大于DEBUG等级的错误

logback的配置和使用

将logback的配置文件logback.xml放在/src/main/resource/下,当运行logback时会自动找到该配置文件加载

  • 配置文件及注释
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan 为true时,配置文件发生改变将会被重新加载 scanPeriod 检测配置文件的时间间隔默认为毫秒 debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds"
	debug="false">
	<!-- 定义参数常量 -->
	<!-- 错误级别:TRACE<DEBUG<INFO<WARN<ERROR 定义log.level为debug 只显示DEBUG 和大于DEBUG等级的错误 -->
	<property name="log.level" value="debug" />
	<!-- 设置日志内容保存多长时间 -->
	<property name="log.maxHistory" value="30" />
	<!-- 设置存储路径 -->
	<property name="log.filePath"
		value="${catalina.base}/logs/webapps"></property>
	<!-- 设置日志相关格式格式 -->
	<property name="log.pattern"
		value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread] %-5level %logger{50} - %msg%n" />

	<!-- 控制台设置 -->
	<!-- appender 设置输出媒介以及输出路径 -->
	<appender name="consoleAppender"
		class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoder的功能类似于layout,layout仅仅完成一个event事件转换为一组字符串 encoder除了将evnet事件转换为byte数组,也会将日志输出到相应的文件中 -->
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

	<!-- DEBUG -->
	<appender name="debugAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/debug.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<!-- 符合DEBUG记录,不符合不记录 -->
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>


	<!-- INFO -->
	<appender name="infoAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/info.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<!-- 符合INFO记录,不符合不记录 -->
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>


	<!-- DEBUG -->
	<appender name="errorAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/error.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<!-- 符合DEBUG记录,不符合不记录 -->
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	
	<!-- logger 存放日志对象,关注哪个地方的日志
		additivity为true时,将父类(root)中的appender-ref继承,且不是按照root的level,
		且一个类只能对应一个logger
	 -->
	<logger name="com.o2o" level="${log.level}" additivity="true">
		<appender-ref ref="debugAppender"/>
		<appender-ref ref="infoAppender"/>
		<appender-ref ref="errorAppender"/>
	</logger>
	
	<!-- 特殊的Logger 如果logger不指定level则默认继承root下的level -->
	<root level="info">
		<appender-ref ref="consoleAppender"/>
	</root>
</configuration>
  • 使用:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Logger   logger = LoggerFactory.getLogger(this.getClass()); 

@Controller 
@RequestMapping(value = "") 
public class LoginController  { 
   
	@RequestMapping(value = "") 
	@ResponseBody 
	public void login()  { 
       		logger.debug("输出DEBUG级别的日志"); 
        	logger.info("输出INFO级别的日志"); 
       	 	logger.error("输出ERROR级别的日志"); 
    	} 
	} 
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐