设为首页 加入收藏

TOP

Java日志记录框架Logback详解(一)
2018-04-08 08:51:25 】 浏览:1047
Tags:Java 日志 记录 框架 Logback 详解

为什么使用logback


记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结一下,logback大约有以下的一些优点:


总而言之,如果大家的项目里面需要选择一个日志框架,那么我个人非常建议使用logback。


logback加载


我们简单分析一下logback加载过程,当我们使用logback-classic.jar时,应用启动,那么logback会按照如下顺序进行扫描:


以上任何一项找到了,就不进行后续扫描,按照对应的配置进行logback的初始化,具体代码实现可见ch.qos.logback.classic.util.ContextInitializer类的findURLOfDefaultConfigurationFile方法。


当所有以上四项都找不到的情况下,logback会调用ch.qos.logback.classic.BasicConfigurator的configure方法,构造一个ConsoleAppender用于向控制台输出日志,默认日志输出格式为"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"。


logback的configuration


logback的重点应当是Appender、Logger、Pattern,在这之前先简单了解一下logback的<configuration>,<configuration>只有三个属性:


<logger>与<root>


先从最基本的<logger>与<root>开始。


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


<root>也是<logger>元素,但是它是根logger,只有一个level属性,因为它的name就是root。


接着写一段代码来测试一下:


public class Slf4jTest {


    @Test
    public void testSlf4j() {
        Logger logger = LoggerFactory.getLogger(Object.class);
        logger.trace("=====trace====="); 
        logger.debug("=====debug====="); 
        logger.info("=====info====="); 
        logger.warn("=====warn====="); 
        logger.error("=====error====="); 
    }
   
}


logback.xml的配置为:


<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </layout>
    </appender>
   
    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
   
</configuration>


root将打印级别设置为"info"级别,<appender>暂时不管,控制台的输出为:


2018-03-26 22:57:48.779 [main] INFO  java.lang.Object - =====info=====
2018-03-26 22:57:48.782 [main] WARN  java.lang.Object - =====warn=====
2018-03-26 22:57:48.782 [main] ERROR java.lang.Object - =====error=====


logback.xml的意思是,当Test方法运行时,root节点将日志级别大于等于info的交给已经配置好的名为"STDOUT"的<appender>进行处理,"STDOUT"将信息打印到控制台上。


接着理解一下<logger>节点的作用,logback.xml修改一下,加入一个只有name属性的<logger>:


<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">


    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppend

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++的命名空间意义解读 下一篇PHP 单例模式和工厂模式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目