Java 如何设置log4j属性文件?
我有一个使用log4j的eclipsejava项目。我无法将log4j配置文件设置为通过文件路径访问。我必须导出并在jar中运行项目 以下是我如何尝试的:Java 如何设置log4j属性文件?,java,log4j,Java,Log4j,我有一个使用log4j的eclipsejava项目。我无法将log4j配置文件设置为通过文件路径访问。我必须导出并在jar中运行项目 以下是我如何尝试的: public class Wita { static Logger logger; public static void main(String[] args) { System.setProperty("log4j.configuration", new File("").getCanonicalPath()+File.se
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\u 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:尝试使用上下文类加载器sun.misc.Launcher查找[C:\Users\roncsak\eclipse\u workspace\WITA\resources\log4j.xml]$AppClassLoader@18e3e60.
log4j:尝试使用sun.misc.Launcher查找[C:\Users\roncsak\eclipse\u workspace\WITA\resources\log4j.xml]$AppClassLoader@18e3e60类加载器。
log4j:尝试使用ClassLoader.getSystemResource()查找[C:\Users\roncsak\eclipse\u workspace\WITA\resources\log4j.xml]。
log4j:找不到资源:[C:\Users\roncsak\eclipse\u workspace\WITA\resources\log4j.xml]。
我希望随着时间的推移更改log4j.xml,而无需构建另一个jar文件。我该怎么做?您可以设置VM参数:
-Dlog4j.configuration='path\u 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>);
}
String logFilePath=new File();
if(logFilePath==null | |“”.equalsIgnoreCase(logFilePath)){
URL文件=this.getClass().getResource(默认配置);
DOMConfigurator.configure(文件);
}否则{
DOMConfigurator.configure();
}
来自以下位置的“默认初始化过程”:
- 将资源字符串变量设置为 log4j.配置系统属性。指定 默认初始化文件通过log4j.configuration系统 财产。如果系统属性log4j.configuration不是 定义,然后将字符串变量资源设置为其默认值 “log4j.属性”李>
- 尝试将资源变量转换为URL
- 如果资源变量无法转换为URL,例如,由于 创建一个畸形的DurLexException,然后从 通过调用 org.apache.log4j.helpers.Loader.getResource(resource,Logger.class) 返回一个URL。注意字符串“log4j.properties” 构成格式不正确的URL。请参阅Loader.getResource(java.lang.String) 用于搜索位置的列表
文件:
前置到log4j.configuration
属性值,以便将其视为URL
看
更好的代码:
System.setProperty("log4j.configuration", new File("resources", "log4j.xml").toURL());
所有这些答案都不令人满意,因此我在这里为将来可能需要这些答案的人发帖:
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();
}
}
希望这能有所帮助。
java.io.File.tour()
现在已经过时了。如果此方法的签名是System.setProperty(String,String),请改为使用:x.toURI().tour()
它的工作原理?它不支持URL作为其值。我这样问是因为将路径作为字符串传递给setProperty对我不起作用。@DanielT.Sobrosa,您是否尝试使用答案中提到的前缀?是的,但我解决了问题。。。我犯了个错误。在初始化log4j.configuration
system属性之前,我得到了一个记录器实例。现在一切正常。谢谢。来自未来的更新:log4j v2已将用于覆盖配置文件的系统属性更改为log4j.configurationFile
。
# 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