spring mvc日志:slf4j+logback

commons与slf4j

commons-logging和slf4j都是日志门面库, 提供统一日志接口, 再由实际的日志框架(如log4j, logback, jdk-logging)实现. 不同的是, commons-logging在程序运行时自动查询实际的日志库, 而log4j是在编译阶段静态绑定实际日志库, 并且有占位符绑定功能, 因此log4j的执行效率更高, 目前使用较多.

logback与log4j

logback和log4j由同一个创始人设计. logback-classic是log4j的一个改良版本. logback当前分成三个模块 : logback-core, logback- classic和logback-access. logback-core是其它两个模块的基础模块. 此外logback-classic完整实现slf4j api, 可以很方便地更换成其它日志系统如log4j或JDK14 Logging. logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能.

logback的优势包括:
  • 实现更快, 性能更好
  • 测试全面, 文档丰富
  • 自然地实现slf4j api
  • 能自动重载配置文件

spring使用slf4j+logback

spring默认使用commons-logging, 首先需要排除commons-logging. 需要的jar包如下:

  • slf4j-api : slf4j接口库, 基础组件
  • jcl-over-slf4j : commons-logging到slf4j的桥接包
  • logback-core : logback基础组件
  • logback-classic : 实现slf4j接口
        <!-- springmvc, 其他依赖的spring组件由maven自动引入 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
            <!-- 排除commons-logging -->
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- jcl-over-slf4j是commons-logging转换为slf4j的桥梁, 
              基础模块slf4j-api由maven自动引入 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        
        <!-- logback-classic实现slf4j接口, 
              基础模块logback-core由maven自动引入 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>

logback.xml

在classpath目录新建logback.xml, logback配置与log4j基本相同.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <Encoding>UTF-8</Encoding>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,
            %-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </layout>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

代码用法

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserService {
    private static final Logger logger = 
        LoggerFactory.getLogger(UserService.class);

    public void getUser() {
        logger.info("user {} is {} years old", "Aray", 13);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容