站長資訊網
        最全最豐富的資訊網站

        slf4j 搭配 log4j2 處理日志

        關于 log4j

        Log4j + Slf4j 的使用組合最為常見,但是我們知道 Log4j 目前已經停止更新了。Apache推出了新的 Log4j2 來代替 Log4j,Log4j2 是對Log4j 的升級,與其前身 Log4j 相比有了顯著的改進,并提供了許多 Logback 可用的改進,同時解決了 Logback 體系結構中的一些固有問題。因此,Log4j2 + Slf4j 應該是未來的大勢所趨。

        關于 slf4j

        1. LF4J不同于其他日志類庫,與其它日志類庫有很大的不同。SLF4J(Simple logging Facade for Java)不是一個真正的日志實現,而是一個抽象層( abstraction layer),它允許你在后臺使用任意一個日志類庫。如果是在編寫供內外部都可以使用的API或者通用類庫,那么你真不會希望使用你類庫的客戶端必須使用你選擇的日志類庫。
        2. 如果一個項目已經使用了log4j,而你加載了一個類庫,比方說 Apache Active MQ——它依賴于于另外一個日志類庫 logback,那么你就需要把它也加載進去。但如果 Apache Active MQ 使用了 SLF4J,你可以繼續使用你的日志類庫而無需忍受加載和維護一個新的日志框架的痛苦。
        3. 總的來說,SLF4J使你的代碼獨立于任意一個特定的日志API,這是對于 API 開發者的很好的思想。雖然抽象日志類庫的思想已經不是新鮮的事物,而且 Apache commons logging 也已經在使用這種思想了,但 SLF4J 正迅速成為Java世界的日志標準。

        案例使用

        引入 slf4j 和 log4j2 的核心包

        <!-- slf4j核心包-->  <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>1.7.25</version>  </dependency>  <dependency>      <groupId>org.slf4j</groupId>      <artifactId>jcl-over-slf4j</artifactId>      <version>1.7.25</version>      <scope>runtime</scope>  </dependency>    <!--log4j2核心包-->  <dependency>      <groupId>org.apache.logging.log4j</groupId>      <artifactId>log4j-core</artifactId>      <version>2.8.2</version>  </dependency>  <dependency>      <groupId>org.apache.logging.log4j</groupId>      <artifactId>log4j-api</artifactId>      <version>2.8.2</version>  </dependency>  <dependency>      <groupId>org.apache.logging.log4j</groupId>      <artifactId>log4j-slf4j-impl</artifactId>      <version>2.8.2</version>  </dependency>  <dependency>      <groupId>org.apache.logging.log4j</groupId>      <artifactId>log4j-web</artifactId>      <version>2.8.2</version>      <scope>runtime</scope>  </dependency>    <!--log4j2 異步依賴-->  <dependency>      <groupId>com.lmax</groupId>      <artifactId>disruptor</artifactId>      <version>3.3.6</version>  </dependency>    

        log4j2.xml

        <?xml version="1.0" encoding="UTF-8"?>  <configuration status="off" monitorInterval="120">      <properties>          <property name="LOG_HOME">/mytest_log</property>      </properties>      <appenders>          <Console name="Console" target="SYSTEM_OUT">              <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>          </Console>            <!--RollingFile 為全局同步 RandomAccessFile 為異步-->          <RollingRandomAccessFile name="rootAppeder"                                   fileName="${LOG_HOME}/rattanapi.log"                                   filePattern="${LOG_HOME}/$${date:yyyy-MM}/rattanapi-root-%d{yyyy-MM-dd}-%i.log">              <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %ex%msg%n"/>              <Policies>                  <TimeBasedTriggeringPolicy interval="1"/>                  <SizeBasedTriggeringPolicy size="100 MB"/>              </Policies>              <DefaultRolloverStrategy max="30"/>          </RollingRandomAccessFile>            <!--錯誤日志輸出-->          <RollingRandomAccessFile name="errorAppeder"                                   fileName="${LOG_HOME}/rattanapi-error.log"                                   filePattern="${LOG_HOME}/$${date:yyyy-MM}/rattanapi-error-%d{yyyy-MM-dd}-%i.log">              <Filters>                  <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>              </Filters>              <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %ex%msg%n"/>              <Policies>                  <TimeBasedTriggeringPolicy interval="1"/>                  <SizeBasedTriggeringPolicy size="100 MB"/>              </Policies>              <DefaultRolloverStrategy max="30"/>          </RollingRandomAccessFile>        </appenders>        <loggers>          <asyncRoot level="info">              <!--根據配置文件是否打開 console輸出 -->              <appender-ref ref="Console"/>              <appender-ref ref="rootAppeder"/>              <appender-ref ref="errorAppeder"/>          </asyncRoot>      </loggers>  </configuration>

        web.xml中設置log4j2的監聽器和過濾器(servlet3.0及以上版本不需要該步操作)開發Servlet3.0的程序需要一定的環境支持。

        <!--對于log4j2,Servlet2.5以前的版本需要-->     <listener>        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>     </listener>     <filter>        <filter-name>log4jServletFilter</filter-name>        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>     </filter>  <filter-mapping>        <filter-name>log4jServletFilter</filter-name>        <url-pattern>/*</url-pattern>        <dispatcher>REQUEST</dispatcher>        <dispatcher>FORWARD</dispatcher>        <dispatcher>INCLUDE</dispatcher>        <dispatcher>ERROR</dispatcher>   </filter-mapping>

        注意:log4j2不再支持properties文件了,只支持xml,json或是yaml,不指定位置的情況下默認在src/main/resources下查找。

        如果需要自定義位置,需要在上面的web.xml中添加以下代碼

        <context-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath:applicationContext.xml</param-value>  </context-param>  <context-param>      <param-name>log4jConfiguration</param-name>      <param-value>classpath:log4j2.xml</param-value>  </context-param>
        import org.slf4j.Logger;  import org.slf4j.LoggerFactory;    public class Main {      private static final Logger logger = LoggerFactory.getLogger(Main.class);      public static void main(String[] args) {      String world = "world";      logger.info("hellp world:{}",world);      logger.error("exception e");      }  }
        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲AV无码精品色午夜果冻不卡| 国产精品精品自在线拍| 蜜国产精品jk白丝AV网站| 久久精品视频网| 蜜芽亚洲av无码精品色午夜| 久久99精品久久久久久秒播| 精品久久久久久久久中文字幕| 亚洲AV永久青草无码精品| 精品久久综合1区2区3区激情| 老司机国内精品久久久久| 久久精品国产亚洲av影院| 日韩在线精品一二三区| 国产伦精品一区二区三区视频金莲| 国产精品久久久天天影视| 青青青国产精品一区二区| 亚洲精品一级无码中文字幕| 精品无人区无码乱码毛片国产| 四虎国产精品永久一区| 国产suv精品一区二区33| 久久这里只有精品18| 亚洲国产av无码精品| 久久精品国产一区二区| 国产精品单位女同事在线| 九九精品成人免费国产片| 99精品一区二区三区无码吞精| 久久久久久国产精品无码超碰| 亚洲精品成人网久久久久久| 日韩精品在线播放| 久久久久这里只有精品| 久久精品国产一区二区三区不卡| 国产乱子伦精品免费视频| 精品国产福利尤物免费| 国内精品久久久久国产盗摄| 国产农村妇女毛片精品久久| 精品第一国产综合精品蜜芽| 国内精品久久久久久不卡影院| 国精品产露脸自拍| 久久久精品久久久久特色影视| 久久国产精品国语对白| 久久国产精品免费一区二区三区| 欧美午夜精品一区二区三区91|