logback使用学习

版权声明:未经博主本人同意,请勿私自转发分享。 https://blog.csdn.net/Nerver_77/article/details/82855061

关于logback:log4j创始人设计的另一个开源日志组件,主要包括以下模块

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

logback的配置:

Logger:日志记录器,主要用于存放日志对象,也可以定义日志类型、级别。
	Logger级别:TRACE、DEBUG、INFO、WARN、ERROR,存在于ch.qos.logback.classic.Level类中。
	若logger没有被分配级别,那么将从有被分配级别最近的root logger中继承级别。root logger默认级别是DEBUG。
Appender:指定日志输出的目的地,如:控制台、文件、远程套接字服务器、数据库等。
Layout:日志事件转换为字符串、格式化输出日志的信息。

打印方法和基本选择规则:

例如:logger.debug("msg");是一条级别为debug的记录语句。记录语句的级别高于或等于其logger的有效级别时才会被启用,否则为被禁用。
若logger的有效级别声明为debug,则logger.debug、logger.info、logger.warn、logger.error均可使用。而logger.trace不可用。
该规则是logback的核心。级别排序为:TRACE < DEBUG < INFO < WARN < ERROR

logback的默认配置:logback的配置是用过xml文件进行配置存储的

如果配置文件logback.xml、logback-test.xml不存在,那么logback默认的会调用BasicConfigurator,创建一个最小化配置。
最小化配置由一个关联到root logger的ConsoleAppender组成。
输出用模式:%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的PatternLayoutEncoder进行格式化。
root logger默认级别是DEBUG。

logback.xml配置文件约束:

基本结构:以<configuration>开头,后面有零个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素。

logback默认配置步骤:

1. 在classpath下查找文件logback-test.xml;
2. 如果文件不存在,则查找文件logback.xml;
3. 如果两个文件都不存在,logback用BasicConfigurator自动进行配置,日志记录输出至控制台。

logback测试Demo

logback.xml 根据logback.xml配置文件的约束进行分段解释说明,最后贴出全部内容。

1.configuration:根节点标签,包含三个属性。

scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

example:
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<!--other configuration-->	
</configuration>

2.property:常用子节点标签,用来定义变量值,属性为name和value,通过定义的值会被插入到logger上下文中,可以使"${}"来使用变量。

<!-- 定义参数常量 -->
<!-- TRACE < DEBUG < INFO < WARN < ERROR -->
<property name="log.level" value="debug"/>
<!-- 文件最大保存历史数量 -->
<property name="log.maxHistory" value="30"/>
<!-- 日志文件保存路径 这里引用了Tomcat的环境变量:工作目录的根目录catalina.base-->
<property name="log.filePath" value="${catalina.base}/logs/webapps"/>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> 
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n"/>

3.appender:负责记录日志的组件,必要属性name和class(全限定名)

<!-- 控制台日志 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 格式化输出 -->
	<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>
        <onMatch>ACCEPT</onMatch>
        <onMisMatch>DENY</onMisMatch>
    </filter>
</appender>

4.logger:设置某一个包或具体的某一个类的日志打印级别、以及指定appender。有一个name属性,一个可选的level和一个可选的addtivity属性。可以包含零个或多个元素,标识这个appender将会添加到这个logger。

<!-- 根据不同的日志级别分别设置日志记录器,并使用到该logger中,additivity参数是继承root logger配置的开关 -->
<logger name="com.packagename" level="${log.level}" additivity="true">
    <appender-ref ref="debugAppender"/>
    <appender-ref ref="infoAppender"/>
    <appender-ref ref="errorAppender"/>
</logger>

这里关于infoAppender、errorAppender的配置与debugAppender的配置类似,不做赘述。

5.root:它也是logger元素,但是它是root logger,是所有logger的上级。只有一个level属性。

<root level="info">
    <appender-ref ref="consoleAppender"/>
</root>

简单测试(基于SSM):日志一般在controller层或service层进行打印记录,这里在controller层举例。

logger对象生成

Logger logger = LoggerFactory.getLogger(XxxController.class);

请求方法体中添加日志记录语句

//定义info类型日志记录
logger.info("===start===");
long startTime = System.currentTimeMillis();
//Bussiness code
//定义error类型日志记录
logger.error("test error logger");
long endTime = System.currentTimeMillis();
//定义debug类型日志记录,记录方法执行时长,常用于性能调优
logger.debug("costTime[{}ms]", endTime - startTime);
logger.info("===end===");

测试结果

控制台:
在这里插入图片描述
文件路径:
定位catalina_base目录位置
在这里插入图片描述
查看目录位置下文件
在这里插入图片描述

修改系统当前时间后,按照基于时间的滚动文件生成策略,会产生log.gz的压缩日志文件
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nerver_77/article/details/82855061
今日推荐