您好,登錄后才能下訂單哦!
http://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0
log4j2的配置主要包含兩方面功能
1.log配置文件的配置問題
如果進行了local的配置(普通配置,JNDI)配置,直接尋找指定的文件
普通配置:
<context-param> <param-name>log4jConfiguration</param-name> <param-value>/META-INF/log4j2.xml</param-value> </context-param>
JNDI配置:
isLog4jContextSelectorNamed:布爾類型配置,由它選擇是否使用JndiContextSelector。如果它設為true的話,那么log4jContextName一定要配置或者在web.xml中指定display-name。并且log4jConfiguration也要配置一個URL,這個URL是log4j2的配置文件地址,但這個不是必須要配置的。
log4jContextName:配置display-name。
log4jConfiguration:log4j配置文件的路徑
<context-param> <param-name>isLog4jContextSelectorNamed</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>log4jContextName</param-name> <param-value>myApplication</param-value> </context-param> <context-param> <param-name>log4jConfiguration</param-name> <param-value>file:///etc/myApp/myLogging.xml</param-value> </context-param>
2.是否自啟動(分為servlet2.5,servlet3.0以上)
servlet2.5:需要自己配置filter,listener
<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> <dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization only; not supported in --!> </filter-mapping>
servlet3.0:
log4j2能夠在Servlet3.0下正常使用且不用配置。因為在Servlet3.0的API中加入了ServletContainerInitializer,它自動啟動了Filter和ServletContextListener(這兩個類在Servlet2.5中需要配置)。
對于某些用戶來說,自動啟動Log4j是有問題的或者不受歡迎的。你可以使用isLog4jAutoInitializationDisabled參數來關閉自動啟動。在web.xml中進行如下設置,即可自動取消啟動。
<context-param> <param-name>isLog4jAutoInitializationDisabled</param-name> <param-value>true</param-value> </context-param>
一旦你禁止自動初始化,你必須像Servlet2.5 web程序中那樣進行初始化操作。而且必須要在其它的框架啟動之前啟動。
由于log4j2不支持2.4及以下版本的web程序,下面介紹下log4j與log4j2的一些區別
1.pom引入的區別
log4j:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
log4j2:
<!-- log4j2 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>2.1</version> </dependency>
2.log4j想要生效,需要在xml中進行配置,而log4j2則有自啟動功能
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:config/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param>
3.Log調用
log4j:
import org.apache.log4j.Logger; private final Logger LOGGER = Logger.getLogger(Test.class.getName());
log4j2:
import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; private static Logger logger = LogManager.getLogger(Test.class.getName());
log4j2配置:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <!-- 先定義所有的appender --> <appenders> <!-- 這個輸出控制臺的配置 --> <Console name="Console" target="SYSTEM_OUT"> <!-- 控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) --> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 這個都知道是輸出日志的格式 --> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <!-- 文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 --> <!-- append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true --> <File name="log" fileName="log/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 添加過濾器ThresholdFilter,可以有選擇的輸出某個級別以上的類別 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕 --> <File name="ERROR" fileName="logs/error.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進行壓縮,作為存檔 --> <RollingFile name="RollingFile" fileName="logs/web.log" filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="2MB"/> </RollingFile> </appenders> <!-- 然后定義logger,只有定義了logger并引入的appender,appender才會生效 --> <loggers> <!-- 建立一個默認的root的logger --> <root level="trace"> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> <appender-ref ref="ERROR" /> <appender-ref ref="log"/> </root> </loggers> </configuration>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。