Dan*_*Dan 25 java log4j properties
如何让log4j获取属性文件.
我正在编写一个Java桌面应用程序,我想使用log4j.在我的主要方法中,如果有这个:
PropertyConfigurator.configure("log4j.properties");
Run Code Online (Sandbox Code Playgroud)
当我打开Jar时,log4j.properties文件位于同一目录中.
但是我得到了这个错误:
log4j:ERROR无法读取配置文件[log4j.properties].java.io.FileNotFoundException:log4j.properties(系统找不到指定的文件)
我究竟做错了什么?
kgi*_*kis 47
我相信configure方法需要一个绝对路径.无论如何,您还可以尝试首先加载Properties对象:
Properties props = new Properties();
props.load(new FileInputStream("log4j.properties"));
PropertyConfigurator.configure(props);
Run Code Online (Sandbox Code Playgroud)
如果属性文件在jar中,那么你可以这样做:
Properties props = new Properties();
props.load(getClass().getResourceAsStream("/log4j.properties"));
PropertyConfigurator.configure(props);
Run Code Online (Sandbox Code Playgroud)
以上假设log4j.properties位于jar文件的根文件夹中.
小智 13
使用PropertyConfigurator.configure(String configFilename)时,它们是log4j库中的以下操作.
Properties props = new Properties();
FileInputStream istream = null;
try {
istream = new FileInputStream(configFileName);
props.load(istream);
istream.close();
}
catch (Exception e) {
...
Run Code Online (Sandbox Code Playgroud)
它读取失败,因为它从执行应用程序的当前目录中查找"Log4j.properties".
如何更改属性文件的读取部分的方式如下,并将"log4j.properties"放在设置CLASSPATH的目录上.
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);
Run Code Online (Sandbox Code Playgroud)
存在将"Log4j.properties"放入jar文件的另一种方法.
jar xvf [YourApplication].jar log4j.properties
Run Code Online (Sandbox Code Playgroud)
小智 7
只需设置-Dlog4j.configuration = file:log4j.properties为我工作.
然后log4j 在应用程序的当前工作目录中查找文件 log4j.properties.
请记住,log4j.configuration是一个URL规范,因此如果要引用文件系统上的常规文件,即不在类路径上的文件,请在log4j.properties文件名前面添加"file:"!
最初我指定了-Dlog4j.configuration = log4j.properties.但是,仅当log4j.properties位于类路径上时才有效.当我将log4j.properties复制到我的项目中的main/resources并重建以便将其复制到目标目录(maven项目)时,这也有效(或者你可以将log4j.properties打包到你的项目罐中,但那不会允许用户编辑记录器配置!).