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

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

 结合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进行配置。

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.jar

然后配置 logback 配置文件

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

  logback-test.xml 配置文件一般放在src/test/resources文件夹,在该文件夹中新建 logback-test.xml 文件。

  logback.xml 配置示例:

<?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 配置示例:

<?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。

在代码中的使用同上

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

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

原文地址:https://www.cnblogs.com/yuxiaole/p/9297266.html