簡體   English   中英

如何設置log4j屬性文件?

[英]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>);   
}

所有這些上述答案都不滿足,所以我在這里發帖給未來可能需要這個的人:

  1. 您需要指定您的財產所在的位置。 通過程序或命令選項都可以。

編程方式:

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();
    }
}
  1. 創建自己的log4j.properties文件:

#  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM