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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM