2019獨角獸企業重金招聘Python工程師標準>>>
- 第一步:添加log4j-api、log4j-core的支持
<log4j2.version>2.7</log4j2.version> <!-- configure logging -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version>
</dependency>
- 第二步:在resources目錄下添加log4j2.xml,打包后,會自動復制到classpath下
<?xml version="1.0" encoding="UTF-8"?>
<!--status : 這個用于設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,會看到log4j2內部各種詳細輸出
monitorInterval : Log4j能夠自動檢測修改配置文件和重新配置本身, 設置間隔秒數。 -->
<configuration status="WARN" monitorInterval="600"><properties><!-- 配置日志文件輸出目錄 --><property name="LOG_HOME">D:/logs</property><property name="APPLICATION_FILE_NAME">application</property><property name="ERROR_FILE_NAME">error</property></properties><Appenders><!-- 配置日志文件輸出目錄 --><Console name="Console" target="SYSTEM_OUT"><!-- 控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) --><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><!-- 輸出日志的格式 --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} - %msg%n"/></Console><!--fileName 指定當前日志文件的位置和文件名稱 filePattern 指定當發生Rolling時,文件的轉移和重命名規則--><RollingRandomAccessFile name="APPLICATION-APPENDER"fileName="${LOG_HOME}/${APPLICATION_FILE_NAME}.log"filePattern="${LOG_HOME}/${APPLICATION_FILE_NAME}.%d{yyyy-MM-dd}-%i.log"><PatternLayout charset="UTF-8"pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} - %msg%n"/><Policies><!--和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-ddHH-mm}-%i,最小的時間粒度是mm,即分鐘,TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1分鐘生成一個新文件。如果改成%d{yyyy-MM-ddHH},最小粒度為小時,則每一個小時生成一個文件。modulate:Indicates whether the interval should be adjusted to cause the next rollover tooccur on the interval boundary.--><TimeBasedTriggeringPolicy interval="1" /><!--指定當文件體積大于size指定的值時,觸發Rolling--><SizeBasedTriggeringPolicy size="200 MB"/></Policies><!--指定最多保存的文件數 (指-%i 一個間隔最多文件數)--><!--<DefaultRolloverStrategy max="20"/>--></RollingRandomAccessFile><!--fileName 指定當前日志文件的位置和文件名稱 filePattern 指定當發生Rolling時,文件的轉移和重命名規則--><RollingRandomAccessFile name="ERROR-APPENDER"fileName="${LOG_HOME}/${ERROR_FILE_NAME}.log"filePattern="${LOG_HOME}/${ERROR_FILE_NAME}.%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout charset="UTF-8"pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} - %msg%n"/><Policies><!--和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-ddHH-mm}-%i,最小的時間粒度是mm,即分鐘,TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1分鐘生成一個新文件。如果改成%d{yyyy-MM-ddHH},最小粒度為小時,則每一個小時生成一個文件。modulate:Indicates whether the interval should be adjusted to cause the next rollover tooccur on the interval boundary.--><TimeBasedTriggeringPolicy interval="1" /><!--指定當文件體積大于size指定的值時,觸發Rolling--><SizeBasedTriggeringPolicy size="200 MB"/></Policies><!--指定最多保存的文件數 (指-%i 一個間隔最多文件數)--><!--<DefaultRolloverStrategy max="20"/>--></RollingRandomAccessFile></Appenders><Loggers><!--additivity="false"表示在該logger中輸出的日志不會再延伸到父層logger additivity="false"表示在該logger中輸出的日志不會再延伸到父層logger日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低于WARN的信息都不會輸出。--><!-- 系統全日志 --><Logger name="com.zhaogang" level="DEBUG" additivity="true"><AppenderRef ref="APPLICATION-APPENDER"/><AppenderRef ref="ERROR-APPENDER"/></Logger><Root level="DEBUG"><AppenderRef ref="Console"/></Root></Loggers>
</configuration>
private static Logger logger = LogManager.getLogger("當前類名即可");logger.info("trace-debug-info-warn-error-fatal");
?
?
注意:
①
<web-app> 2.5 以前要多個依賴 log4j-web,還需要在web.xml配置listener、filter
?Log4j2 不支持 Servlet 2.5以前的WEB應用。
(Servlet 2.5 意思是 web.xml 文件中的 <web-app> ?的 version屬性值是 2.5 。)
解決方案:升級web-app至3.0 ?
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
?
②
spring默認使用commons logging打日志,會被activiti的橋接工具把日志輸入重定向到slf4j
<!-- 橋接:告訴Slf4j使用Log4j2 -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version>
</dependency>
?
?
總結:
1.添加log4j-api、log4j-core的支持
2.在resources目錄下添加log4j2.xml,打包后,會自動復制到classpath下
3.private static Logger logger = LogManager.getLogger("exception");
??logger.info("trace-debug-info-warn-error-fatal");
?
Log4j 2 包含了基于LMAX 分離庫的下一代的異步日志系統,在多線程環境下,異步日志系統比 Log4j 1.x 和Logback 提高了10倍性能提升(吞吐量和延遲率 )
?
目前的日志框架有jdk自帶的logging,log4j1、log4j2、logback
目前用于實現日志統一的框架apache的commons-logging、slf4j
?
SLF4J(Simple Logging Facade for Java簡單日志門面):
不是具體的日志解決方案,它只服務于各種各樣的日志系統。按照官方的說法,SLF4J是一個用于日志系統的簡單Facade,允許最終用戶在
?
部署其應用時使用其所希望的日志系統。 提供的核心API是一些接口以及一個LoggerFactory的工廠類。
?
log4j(log for java):
Apache的一個開源項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
?
Logback:
由log4j創始人設計的又一個開源日志組件。當前分成三個模塊:
①logback-core(基礎模塊),
②logback- classic(log4j的一個 改良版本)
③logback-access(logback-classic完整實現SLF4J API使你可以很方便地更換成其它日志系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能。)
?
log4j2:
與log4j1發生了很大的變化,不兼容。log4j1僅僅作為一個實際的日志框架,slf4j、commons-logging作為門面,統一各種日志框架的混亂格局,現在log4j2也想跳出來充當門面了,也想統一大家了。哎,日志格局越來越混亂了。
?
?
log4j-api: 作為日志接口層,用于統一底層日志系統
log4j-core : 作為上述日志接口的實現,是一個實際的日志框架
slf4j、jcl、jul、log4j1、log4j2、logback大總結
?
轉載于:https://my.oschina.net/wuweixiang/blog/828538
總結
以上是生活随笔為你收集整理的logging总结 - log4j2使用流程[归档存储]的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。