manven springmvc 项目中 slf4j 的配置使用(结合log4j 或者 logback)

2021年11月20日 阅读数:2
这篇文章主要向大家介绍manven springmvc 项目中 slf4j 的配置使用(结合log4j 或者 logback),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

前言:每一个maven springmvc 都应该有日志功能,SLF4J(Simple logging facade for Java)就是一种日志规范,它提供了一个共通接口,能够适配多种不一样的LOG实现,下面介绍一下在Maven项目中使用SLF4J。spring

 结合log4j

在项目中首先应该在 pom.xml 中添加依赖

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
      <!-- <scope>test</scope> -->
    </dependency>

而后编写 log4j 配置文件

  依照Maven项目特性,在src/main目录下新建resources文件夹,在该文件夹中新建log4j.properties文件,对log4j进行配置。sql

log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=logs/notify-subscription.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%c] %m%n

在代码中的使用

@Controller
@RequestMapping("/demoCtrl")
public class DemoCtrl {

    private final Logger logger = LoggerFactory.getLogger(DemoCtrl.class);

    @RequestMapping("/index")
    public String index() {
        logger.info("sdfdsf{}", "123213");
        return "yule/demo/demo";
    }
}

输出效果

 

结合logback

在项目中添加 pom 依赖

  直接在 Maven Repository 中搜索 Logback, 选择使用量最大的「Logback Classic Module」, 将该依赖添加到 POM.xml 中,例如:数据库

  <!-- slf4j-->
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>    

    <!--logback-->
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>

  这里将会在项目中导入如下类库:logback-classic.x.x.x.jar、logback-core.x.x.x.jar、slf4j-api-x.x.x.jarapache

而后配置 logback 配置文件

  logback.xml 配置文件通常放在src/main/resources文件夹,在该文件夹中新建 logback.xml 文件。api

  logback-test.xml 配置文件通常放在src/test/resources文件夹,在该文件夹中新建 logback-test.xml 文件。服务器

  logback.xml 配置示例:mvc

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D:/log/demo.log</file>        
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>D:/log/demo.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- project default level -->
    <logger name="com.yule" level="INFO" />

    <!--log4jdbc -->
    <logger name="jdbc.sqltiming" level="INFO"/>
    <logger name="dao" level="DEBUG" >
        <appender-ref ref="console" />
    </logger>
    
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="rollingFile" />
    </root>
</configuration>

  logback-test.xml 配置示例:app

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

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

  在 logback.xml 中看到 level=“INFO”,这是在配置日志级别。有给特定包指定日志级别,特定包之外的都是由 root 节点指定日志级别。日志级别由低到高: trace、debug、info、warn、error。框架

在代码中的使用同上

完!下面是详细介绍和说明。maven

 

slf4j 的介绍

  定义:即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各类各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,容许最终用户在部署其应用时使用其所但愿的日志System。

  解释:实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点相似JDBC,不过比JDBC更简单,在JDBC中,你须要指定驱动程序,而在使用SLF4J的时候,不须要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不

用考虑具体数据库同样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录便可,最终日志的格式、记录级别、输出方式等经过具体日志系统的配置来实现,所以能够在应用中灵活切换日志系统。 

  若是一个项目已经使用了log4j,而你加载了一个类库,比方说 Apache Active MQ——它依赖于于另一个日志类库logback,那么你就须要把它也加载进去。但若是Apache Active MQ使用了SLF4J,你能够继续使用你的日志类库而无需忍受加载和维护一个新的日志框架的痛苦。

  总的来讲,SLF4J使你的代码独立于任意一个特定的日志API,这是对于API开发者的很好的思想。

  使用条件:若是你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,由于不可能影响最终用户选择哪一种日志系统。在另外一方面,若是是一个简单或者独立的应用,肯定只有一种日志系统,那么就没有使用SLF4J的必要。假设你打算将你使用log4j的产品卖给要求使用JDK 1.4 Logging的用户

时,面对成千上万的log4j调用的修改,相信这绝对不是一件轻松的事情。可是若是开始便使用SLF4J,那么这种转换将是很是轻松的事情。

log4j 的介绍

  定义:Log4j是Apache的一个开源项目,经过使用Log4j,咱们能够控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;咱们也能够控制每一条日志的输出格式;经过定义每一条日志信息的级别,咱们可以更加细致地控制日志的

生成过程。最使人感兴趣的就是,这些能够经过一个配置文件来灵活地进行配置,而不须要修改应用的代码。

  配置说明:有两种方式,能够参考百度百科:https://baike.baidu.com/item/log4j/480673?fr=aladdin

slf4j 与 log4j 的关系

  slf4j是日志的接口(只定义了一些方法而没有去实现),和commons-logging同样。而log4j是具体的实现(即怎么来打印日志等),和logback是同样的。

log4j 与 logback 对比、及使用配置

  https://blog.csdn.net/jibaole/article/details/52442694