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

相關文章
相關標籤/搜索