四时宝库

程序员的知识宝库

Java,SpringBoot,Slf4j+Logback例

SLF4J (Simple Logging Facade For Java)

一个针对于各类Java日志框架的统一Facade抽象,定义了统一的日志抽象接口,真正的日志实现则是在运行时决定。

LogBack新一代日志框架:

由log4j的创始人开发的新一代日志框架,用于替代log4j,它效率更高、能够适应诸多的运行环境,LogBack的架构设计足够通用,可适用于不同的环境。

当前LogBack分为三个模块:lobback-core,logback-classic和logback-access。

1、lobback-core,核心;

2、logback-classic,是core的扩展,本身实现了SL4J的API,比较容易在logback与其它日志系统之间转换。

3、logback-access,集成了Servlet容器,提供了通过HTTP访问日志的功能。

LogBack的日志级别: TRACE < DEBUG < INFO < WARN < ERROR

日志实现:Log4j、Log4j2和Logback,推荐使用Logback,其效率显著高于Log4j,SpringBoot也推荐并且默认使用的日志系统。

实现案例:

1、pom.xml依赖

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
</dependency>

2、Logback配置

在工程src\main\resources路径下创建logback.xml配置文件

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

    <!--定义日志文件的存储位置 -->
    <property name="LOG_HOME" value="d:/"/>

    <!--控制台日志, 控制台输出 -->
    <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="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <FileNamePattern>${LOG_HOME}/demo_log.%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>

    <!-- 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"/>

    <!-- 日志输出级别 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="fileAppender"/>
    </root>

</configuration>

3、Springboot应用

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TestLog {

    final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestLog.class);

    public static void print(Object o){
        // 日志级别,由低到高(trace、debug、info、warn、error)
        log.trace("trace," + o);
        logger.trace("trace," + o);
        log.debug("trace," + o);
        logger.debug("trace," + o);
        log.info("trace," + o);
        logger.info("trace," + o);
        log.warn("trace," + o);
        logger.warn("trace," + o);
        log.error("trace," + o);
        logger.error("trace," + o);
    }

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接