日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

slf4j+log4j2的整合配置

發布時間:2024/1/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 slf4j+log4j2的整合配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Log4j 2是log4j 1.x和logback的改進版,據說采用了一些新技術(無鎖異步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解決了一些死鎖的bug,而且配置更加簡單靈活。下面是結合slf4j的配置和使用過程:

1、引用依賴包及相關注釋:
  • 1
<!-- log配置:Log4j2 + Slf4j --> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.2</version> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.2</version> </dependency> <dependency> <!-- 橋接:告訴Slf4j使用Log4j2 --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.2</version> </dependency> <dependency> <!-- 橋接:告訴commons logging使用Log4j2 --><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jcl</artifactId><version>2.2</version> </dependency> <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.10</version> </dependency>
  • 26

**注:**log4j-api-2.x 和 log4j-core-2.x是必須的,其他包根據需要引入,如下圖所示:

2、代碼中使用:

@RunWith(SpringJUnit4ClassRunner.class) //使用Spring Junit4進行測試 @ContextConfiguration ({"classpath:spring/applicationContext.xml"}) //加載配置文件 public abstract class BaseJunit4Test { }import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; mport com.xjj.test.BaseJunit4Test; public class Log4j2Test extends BaseJunit4Test {static public Logger logger = LoggerFactory.getLogger(Log4j2Test.class); @Testpublic void logTC1(){logger.error("error");logger.debug("debug");logger.info("info");logger.trace("trace");logger.warn("warn");logger.error("error {}", "param");} }
  • 78101112131415161711920222

輸出結果:

16:19:28.779 [main] ERROR com.xjj.test.mytest.Log4j2Test - error 16:19:28.781 [main] ERROR com.xjj.test.mytest.Log4j2Test - error param
  • 1

注:如果沒有任何配置,Log4j2會使用缺省配置:

root logger:ConsoleAppender PatternLayout:"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
  • 1

級別:ERROR

3、配置(使用xml配置文件):
官網配置指南:http://logging.apache.org/log4j/2.x/manual/configuration.html

在classpath中創建名字為log4j2.xml的配置文件。

Configuration標簽中的常用元素說明:
monitorInterval:Log4j 2 定期檢查和應用配置文件的時間間隔(單位:秒,如果更改配置文件,不用重啟系統)。
status:Log4j內部事件記錄的等級,只對Log4j本身的事件有效。
strict:是否使用XML Schema來檢查配置文件。
schema:Shema文件的位置。
例子:

<Configuration status="warn" monitorInterval="30" strict="true" schema="Log4J-V2.2.xsd">…… </Configuration>
  • 13

Loggers標簽說明:
它被用來配置LoggerConfig,包含一個root logger和若干個普通logger
普通必須有一個name元素,root logger不用name元素
每個logger可以指定一個level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定時level默認為ERROR
additivity指定是否同時輸出log到父類的appender,缺省為true。(層級關系與Java包類似,例如:com.foo是com.foo.Bar的父級;java是java.util的父級,是java.util.vector的祖先。root是最頂層。)
每個logger可以包含若干個屬性:AppenderRef, Filter, Layout, 等
例子:

<Loggers><Root level="warn"> <!-- 全局配置 --><AppenderRef ref="Console"/></Root><!-- 為某些包/類配置Log級別,這些logger繼承了root logger --><Logger name="com.xjj.test" level="TRACE"/><Logger name="com.xjj.test2" level="DEBUG" additivity="false"><AppenderRef ref="Console"/></Logger> </Loggers>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Filters標簽說明:
與防火墻過濾的規則相似,log4j2的過濾器也將返回三類狀態:Accept(接受), Deny(拒絕) 或Neutral(中立)。其中,Accept意味著不用再調用其他過濾器了,這個LogEvent將被執行;Deny意味著馬上忽略這個event,并將此event的控制權交還給過濾器的調用者;Neutral則意味著這個event應該傳遞給別的過濾器,如果再沒有別的過濾器可以傳遞了,那么就由現在這個過濾器來處理。

Appenders標簽說明:
Appender用來定義不同的輸出位置,可以是console、文件、遠程socket服務器、Apache Flume、JMS以及遠程 UNIX 系統日志守護進程。一個Logger可以綁定多個不同的Appender。

Layout/PatternLayout:
定義log的格式(一種類似C語言printf函數的打印格式)。

配置例子和注解如下:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <!-- Log4j 2.x 配置文件。每30秒自動檢查和應用配置文件的更新; --> <Configuration status="warn" monitorInterval="30" strict="true" schema="Log4J-V2.2.xsd"><Appenders><!-- 輸出到控制臺 --><Console name="Console" target="SYSTEM_OUT"><!-- 需要記錄的級別 --><!-- <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" /></Console><!-- 輸出到文件,按天或者超過80MB分割 --><RollingFile name="RollingFile" fileName="../logs/xjj.log" filePattern="../logs/$${date:yyyy-MM}/xjj-%d{yyyy-MM-dd}-%i.log.gz"><!-- 需要記錄的級別 --><!-- <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" /><Policies><OnStartupTriggeringPolicy /><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="80 MB" /></Policies></RollingFile></Appenders><Loggers><Root level="info"> <!-- 全局配置 --><AppenderRef ref="Console" /><AppenderRef ref="RollingFile"/></Root><!-- 為sql語句配置特殊的Log級別,方便調試 --><Logger name="com.xjj.dao" level="${log.sql.level}" additivity="false"><AppenderRef ref="Console" /></Logger></Loggers> </Configuration>
  • 3

實際使用的例子(用slf4j接口):

import org.slf4j.Logger; import org.slf4j.LoggerFactory;private final static Logger logger = LoggerFactory.getLogger(MyClass.class); try {…… } catch (Exception e) {logger.error("發生了異常:", e); } logger.info("請求處理結束,耗時:{}毫秒", (System.currentTimeMillis() - beginTime)); //第一種用法 logger.info("請求處理結束,耗時:" + (System.currentTimeMillis() - beginTime) + "毫秒"); //第二種用法
  • 2

總結

以上是生活随笔為你收集整理的slf4j+log4j2的整合配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。