Struts2 的 logger 是與 log4j2 作整合,同樣是 Apache Project 專案之一。為了瞭解一下與架構 Java 專案時的偵錯機制,所以花了半天的時間來實作。
Maven 對 log4j2 相依性
<properties> <dependency> |
log4j2.xml (在 src/main/resources 目錄下)
<?xml version="1.0" encoding="UTF-8"?> <!-- 優先等級: FATAL > ERROR > WARN >INFO > DEBUG --> <Configuration> <properties> <property name="LOG_HOME">/log/mis</property> <property name="FILE_NAME">mis</property> </properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> <File name="FILE" fileName="${LOG_HOME}/logfile_fileMode.log" append="true"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </File> <RollingRandomAccessFile name="MIS_PROJECT" fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> </Appenders> <Loggers> <Logger name="com.opensymphony.xwork2" level="info"/> <Logger name="org.apache.struts2" level="info"/> <Logger name="com.mis.demo" level="DEBUG" additivity="true"> <AppenderRef ref="STDOUT"/> </Logger> <Root level="info"> <AppenderRef ref="STDOUT"/> </Root> <Root level="WARN"> <AppenderRef ref="MIS_PROJECT" /> </Root> </Loggers> </Configuration> |
參數說明
1. monitorInterval="1800" 指 log4j2 每隔1800秒(半小時),自動監控該設定檔是否有變化,如果變化,則自動根據檔內容重新配置(很不錯的功能!) 所以<Root level="WARN"> 這個 root logger中,記錄了 WARN 以上級別的日誌,會寫入日誌 mis.log 檔案內;當 <Logger name="com.mis.demo" level="DEBUG" additivity="true"> 有 DEBUG 以上級別的日誌時,也會寫入檔案日誌 mis.log 檔案內。。如果把additivity="true" 中的true,改成false,root logger就不會再起作用,即只會控制台輸出,日誌不會記錄在檔案中。 |
程式 Log4j2Example.java
package com.mis.demo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4j2Example { private static final Logger LOG = LogManager.getLogger(Log4j2Example.class.getName()); public static void main(String[] args) { LOG.debug("This will be printed on debug"); LOG.info("This will be printed on info"); LOG.warn("This will be printed on warn"); LOG.error("This will be printed on error"); LOG.fatal("This will be printed on fatal"); LOG.info("Appending string: {}.", "Hello, World"); } } |
輸出的格式內容
2016-03-11 10:43:52,260 DEBUG [main] demo.Log4j2Example (Log4j2Example.java:9) - This will be printed on debug 2016-03-11 10:43:52,261 INFO [main] demo.Log4j2Example (Log4j2Example.java:10) - This will be printed on info 2016-03-11 10:43:52,262 WARN [main] demo.Log4j2Example (Log4j2Example.java:11) - This will be printed on warn 2016-03-11 10:43:52,262 ERROR [main] demo.Log4j2Example (Log4j2Example.java:12) - This will be printed on error 2016-03-11 10:43:52,262 FATAL [main] demo.Log4j2Example (Log4j2Example.java:13) - This will be printed on fatal 2016-03-11 10:43:52,263 INFO [main] demo.Log4j2Example (Log4j2Example.java:15) - Appending string: Hello, World. |
參考:
http://www.cnblogs.com/yjmyzz/p/3988114.html
http://blog.csdn.net/jiangguilong2000/article/details/11397557
http://memorynotfound.com/log4j2-with-log4j2-xml-configuration-example/
https://logging.apache.org/log4j/2.x/manual/configuration.html
留言列表