[英]How to set log4j property file?
我有一個使用log4j的Eclipse Java項目。 我無法設置要通過文件路徑訪問的log4j配置文件。 我必須在jar中導出並運行項目。
這是我嘗試的方式:
public class Wita {
static Logger logger;
public static void main(String[] args) {
System.setProperty("log4j.configuration", new File("").getCanonicalPath()+File.separatorChar+"resources"+File.separatorChar+"log4j.xml" );
// System.out.println( System.getProperty("log4j.configuration") );
logger = Logger.getLogger(Wita.class.getName());
}
}
系統輸出打印C:\\ Users \\ roncsak \\ eclipse_workspace \\ WITA \\ resources \\ log4j.xml這很好。 WITA是項目的基本文件夾。 但是使用-Dlog4j.debug參數運行項目時,以下內容也會返回:
log4j: Trying to find [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@18e3e60. log4j: Trying to find [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] using sun.misc.Launcher$AppClassLoader@18e3e60 class loader. log4j: Trying to find [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] using ClassLoader.getSystemResource(). log4j: Could not find resource: [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml].
我想隨着時間的推移更改log4j.xml,而不構建另一個jar文件。 我怎樣才能做到這一點?
從http://logging.apache.org/log4j/1.2/manual.html上的 “默認初始化過程”:
- 將資源字符串變量設置為log4j.configuration系統屬性的值。 指定默認初始化文件的首選方法是通過log4j.configuration系統屬性。 如果未定義系統屬性log4j.configuration,則將字符串變量資源設置為其默認值“log4j.properties”。
- 嘗試將資源變量轉換為URL。
- 如果資源變量無法轉換為URL,例如由於MalformedURLException,則通過調用返回URL的org.apache.log4j.helpers.Loader.getResource(resource,Logger.class)從類路徑中搜索資源。 。 請注意,字符串“log4j.properties”構成格式錯誤的URL。 有關搜索位置的列表,請參閱Loader.getResource(java.lang.String)。
因此,您需要將file:
前置file:
log4j.configuration
屬性值,以便將其視為URL。
請參閱https://stackoverflow.com/a/7927278/603516 。
更好的代碼:
System.setProperty("log4j.configuration", new File("resources", "log4j.xml").toURL());
您可以設置VM參數: -Dlog4j.configuration='path_to_log4j.xml'
或以編程方式:
String logFilePath = new File(<path_to_log4j.xml>);
if (logFilePath == null || "".equalsIgnoreCase(logFilePath)) {
URL file = this.getClass().getResource(DEFAULT_CONF);
DOMConfigurator.configure(file);
} else {
DOMConfigurator.configure(<default_config_file>);
}
所有這些上述答案都不滿足,所以我在這里發帖給未來可能需要這個的人:
編程方式:
private static void setupLog4J(){
try {
System.setProperty("log4j.configuration", new File(".", File.separatorChar+"log4j.properties").toURL().toString());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
# Logging level
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.