如何设置log4j的属性文件?(How to set log4j property file?)

2019-07-31 21:41发布

我有使用log4j一个Eclipse Java项目。 我不能设置为文件路径来访问log4j的配置文件。 我拥有自营出口和运行在一个罐子里的项目。

这里是我尝试:

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:\用户\ roncsak \ eclipse_workspace \ WITA \资源\的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文件。 我怎样才能做到这一点?

Answer 1:

从“默认初始化过程”在http://logging.apache.org/log4j/1.2/manual.html :

  • 设置资源字符串变量的log4j.configuration系统属性的值。 指定默认初始化文件的首选方式是通过log4j.configuration系统属性。 在没有定义的系统属性log4j.configuration情况下,然后将字符串变量资源,它的默认值“log4j.properties”。
  • 尝试将资源变量转换为一个URL。
  • 如果资源变量不能被转换为一个URL,例如由于MalformedURLException的,然后通过调用org.apache.log4j.helpers.Loader.getResource(资源,Logger.class),它返回一个URL搜索来自类路径资源。 请注意,字符串“log4j.properties”构成了一个错误的URL。 对于搜索位置的列表,请参阅Loader.getResource(java.lang.String中)。

所以,你需要预先设置file:log4j.configuration属性值,以便它可以作为URL处理。

见https://stackoverflow.com/a/7927278/603516 。

更妙的代码:

    System.setProperty("log4j.configuration", new File("resources", "log4j.xml").toURL());


Answer 2:

您可以设置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>);   
}


Answer 3:

所有这些上面的回答没有满足,所以我张贴在这里的人谁可能需要这个在未来:

  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

希望这可以帮助。



文章来源: How to set log4j property file?
标签: java log4j