log4j配置日志輸出路徑,log4j加載配置方式和配置詳解

 2023-11-19 阅读 30 评论 0

摘要:log4j配置詳解 log4j的配置文件有兩種格式分別是xml和properties。本文只講解properties格式。比較properties簡潔易懂。 log4j加載配置文件方式 大家在剛接觸log4j時一定都會疑問。log4j的配置文件應該怎么明明并且文件要放在什么目錄下。其實log4j加載配置文件有很多方式&#x

log4j配置詳解

log4j的配置文件有兩種格式分別是xml和properties。本文只講解properties格式。比較properties簡潔易懂。

log4j加載配置文件方式

大家在剛接觸log4j時一定都會疑問。log4j的配置文件應該怎么明明并且文件要放在什么目錄下。其實log4j加載配置文件有很多方式,大家只需實現以下中的一種即可,推薦用第一種方法,最簡單。

src/main/resources 下添加log4j.properties或log4j.xml文件

普通情況下只需將log4j配置文件命名為log4j.properties或log4j.xml(必須這兩名之一),并放在classpath:下。一般放在src/main/resources就行。

配合spring mvc在web.xml中配置Log4jConfigListener、log4jConfigLocation

這種方法好處主要是:
1. 動態的改變記錄級別和策略,不需要重啟Web應用,如《Effective Enterprise Java》所說。
2. 把log文件定在 /WEB-INF/logs/ 而不需要寫絕對路徑。

web.xml添加如下配置即可:<!-- log4j配置,文件路徑,因為是跟隨項目啟動 --><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:/log4j-customer.properties</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>

log4j配置日志輸出路徑,具體可參照: http://www.jb51.net/article/74477.htm

但是這種方式是不被spring官方提倡的,org.springframework.web.util.Log4jConfigListener被加上了@Deprecated注解。主要原因我的理解是log4j的配置文件加載方式有很多種還有是和容器配合(如JBoss)。就是log4j具體加載哪個配置文件是容器決定的。而這種方法則是在web.xml中寫死了,可能會和容器的log4j配置相沖突,所有不提倡使用。原話如下:

/** * Bootstrap listener for custom Log4J initialization in a web environment. * Delegates to Log4jWebConfigurer (see its javadoc for configuration details). * * WARNING: Assumes an expanded WAR file, both for loading the configuration * file and for writing the log files. If you want to keep your WAR unexpanded or * don't need application-specific log files within the WAR directory, don't use * Log4J setup within the application (thus, don't use Log4jConfigListener or * Log4jConfigServlet). Instead, use a global, VM-wide Log4J setup (for example, * in JBoss) or JDK 1.4's java.util.logging (which is global too). **/

通過容器或是系統參數傳入配置文件的讀取路徑

這種方法主要是java程序運行時設置『log4j.configuration』參數。參數值是配置文件路徑。有些容器可以配合設置log4j配置文件的比如JBoss。其參考如下:

JBoss log4j配置:http://blog.csdn.net/ljhabc1982/article/details/6754084

log4j自動加載配置原理

log4j.jar包中有個LogManager類。其中有段靜態代碼,在此類被classloader加載時會按一定順序去加載配置文件:

  1. 判斷是否設定了系統參數『log4j.configuration』。『log4j.configuration』的值是配置文件的路徑。如果有就去加載這個配置文件。
  2. 查找資源文件夾(通常是classpath)下是否有log4j.xml,有就用這個文件。
  3. 查找資源文件夾(通常是classpath)下是否有log4j.properties,有就用這個文件

log4j2可以配置線程數么,源碼如下:

package org.apache.log4j;
public class LogManager {/** @deprecated */public static final String DEFAULT_CONFIGURATION_FILE = "log4j.properties";static final String DEFAULT_XML_CONFIGURATION_FILE = "log4j.xml";//省略多余代碼static {Hierarchy h = new Hierarchy(new RootLogger(Level.DEBUG));repositorySelector = new DefaultRepositorySelector(h);String override = OptionConverter.getSystemProperty("log4j.defaultInitOverride", (String)null);if (override != null && !"false".equalsIgnoreCase(override)) {LogLog.debug("Default initialization of overridden by log4j.defaultInitOverrideproperty.");} else {String configurationOptionStr = OptionConverter.getSystemProperty("log4j.configuration", (String)null);String configuratorClassName = OptionConverter.getSystemProperty("log4j.configuratorClass", (String)null);URL url = null;if (configurationOptionStr == null) {url = Loader.getResource("log4j.xml");if (url == null) {url = Loader.getResource("log4j.properties");}} else {try {url = new URL(configurationOptionStr);} catch (MalformedURLException var7) {url = Loader.getResource(configurationOptionStr);}}if (url != null) {LogLog.debug("Using URL [" + url + "] for automatic log4j configuration.");try {OptionConverter.selectAndConfigure(url, configuratorClassName, getLoggerRepository());} catch (NoClassDefFoundError var6) {LogLog.warn("Error during default initialization", var6);}} else {LogLog.debug("Could not find resource: [" + configurationOptionStr + "].");}}}
}

log4j配置文件詳解

log4j主要由3大組件組成:Logger、Appender、Layout

  • Logger:日志記錄器,負責收集處理日志記錄 (如何處理日志)
  • Appender:日志輸出目的地,負責日志的輸出 (輸出到什么 地方)
  • Layout:日志格式化,負責對輸出的日志格式化(以什么形式展現)

一個logger可以對應多個appender,一個appender只能對應一個layout。

1、Logger

logger可以有選擇的啟動和禁用日志的輸出,我們經常會在各種框架中看到如:

private static final Logger log = LoggerFactory.getLogger(XX.class);
log就代表了一個Logger實例,他的name就是類“XX”的full quailied name(類的全限定名),按照上圖所述,這個log就可以指定多個appender和layout。Logger的名字大小寫敏感,其命名有繼承機制:例如:name為org.apache.commons的logger會繼承name為org.apache的logger。

類加載機制,Log4J中有一個特殊的logger叫做“root”,他是所有logger的根,也就意味著其他所有的logger都會直接或者間接地繼承自root。rootlogger可以用Logger.getRootLogger()方法獲取。

2、Level:

level用來定義日志的級別,分別可以設置為: OFF(關閉)FATAL(致命的) ERROR(錯誤)WARN(警告) INFO(信息)DEBUG (調試) ALL(所有),輸出日志的策略由此Level決定。
例如:如果logger的Level設置為INFO,那么系統只輸出INFO以及以上(WARN、ERROR、FATAL)信息。如果當前logger沒有設定Level,那么它在輸出日志時采用的策略是:它會使用它繼承的Logger的Level作為它自己的Level來處理。如果它的上級也沒有設置Level,那么就找上上級,幾次類推,直到root為止,(root的Level是不能設為空的,所以最終一定會找到一個Level)。

root的level用 log4j.rootLogger=debug來設置

3、Appender

Appender是日志的輸出源,可以控制日志輸出到什么地方去。常見的是方式是輸出到控制臺和保存到文件中。log4j 1.2有幾種常見的Appender:

  • org.apache.log4j.ConsoleAppender(控制臺)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
  • org.apache.log4j.RollingFileAppender((文件大小到達指定尺寸的時候產生一個新的文件)
  • org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)

properties中添加『og4j.appender.』的前綴來配置Appender。配置示例如下:

#控制臺輸出
#console log appender ### ConsoleAppender
log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.ConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ConsoleAppender.layout.ConversionPattern=%d %p [%t] [%c] [%M] - %m%n#輸出所有日志
#all log appender ### AllAppender
log4j.appender.AllAppender=org.apache.log4j.RollingFileAppender
log4j.appender.AllAppender.maxFileSize=50MB
log4j.appender.AllAppender.maxBackupIndex=100
log4j.appender.AllAppender.file=/var/log/com.larrylian.demo/all.log
log4j.appender.AllAppender.threshold=debug
log4j.appender.AllAppender.append=true
log4j.appender.AllAppender.encoding=UTF-8
log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AllAppender.layout.ConversionPattern=%d %p [%t] [%c] - %m%n

4、Layout

類加載和類初始化區別,使用指定的Layout來展示(格式化)日志,常見的Layout有:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以靈活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)

以上例子的:

log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AllAppender.layout.ConversionPattern=%d %p [%t] [%c] - %m%n

就定義日志的輸出格式。 『%d %p [%t] [%c] - %m%n』就是日期輸出的具體格式其%d、%p表示什么,具體參照:

『log4j的PatternLayout參數含義』http://blog.csdn.net/guoquanyou/article/details/5689652

以下是log4j配置示例:

############### define logger ###################
#root logger
log4j.rootLogger=debug,ConsoleAppender,AllAppender,ErrorAppender################ Appender begin #################輸出所有日志
#all log appender ### AllAppender
#指定appender類型
log4j.appender.AllAppender=org.apache.log4j.RollingFileAppender
#文件大小最大值 超過了就產生新的log文件
log4j.appender.AllAppender.maxFileSize=50MB
log4j.appender.AllAppender.maxBackupIndex=100
#文件保存路徑
log4j.appender.AllAppender.file=/var/log/com.larrylian.demo/all.log
#打印這個等級以上的日志  但是這個level一般會被logger的level覆蓋
log4j.appender.AllAppender.threshold=debug
#程序重啟后是否以追加方式寫入文件
log4j.appender.AllAppender.append=true
log4j.appender.AllAppender.encoding=UTF-8
#格式化
log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AllAppender.layout.ConversionPattern=%d %p [%t] [%c] - %m%n#輸出Error日志 按天滾動
#error log appender ### ErrorAppender
log4j.appender.ErrorAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ErrorAppender.file=/var/log/com.larrylian.demo/error.log
log4j.appender.ErrorAppender.datePattern='.'yyyy-MM-dd
log4j.appender.ErrorAppender.threshold=error
log4j.appender.ErrorAppender.append=true
log4j.appender.ErrorAppender.encoding=UTF-8
log4j.appender.ErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorAppender.layout.ConversionPattern=%d %p [%t] [%c] - %m%n#控制臺輸出
#console log appender ### ConsoleAppender
log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.ConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ConsoleAppender.layout.ConversionPattern=%d %p [%t] [%c] [%M] - %m%n################ Appender end ################

log4j2配置,本文部分內容參考:
快速了解Log4J http://www.cnblogs.com/dengyungao/p/7524902.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/183318.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息