我正在为我的 java 项目设置 "log4j" 日志记录框架,如果 comand 行没有指定${file.name}
参数,我想定义log4j.appender.X.File=${file.name}
配置属性的默认路径。
我需要解决方案是动态的:
- 当我在 comand 行上使用 JVM 参数运行.jar文件时-Dfile.name=C:logdirectorypathlog4j-application.log
框架应该写入我在参数上指定的路径>;
- 当我在 comand 行上不使用 JVM 参数的情况下运行.jar文件时 -->框架应该写在.jar文件路径上;
我应该在哪里提供默认路径,以使我的项目了解它应该将文件写入何处?
这是我实际的log4j.properties文件的一部分:
# Root logger option, use one of the following log levels: INFO, WARN, ERROR, DEBUG, TRACE
log4j.rootLogger=DEBUG, stdout, file
[...]
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${file.name}
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=3
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout=com.webratio.rtx.log.SessionAwarePattern
log4j.appender.file.layout.ConversionPattern= %d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true
log4j.appender.file.Threshold=TRACE
使用附加的设置,该应用程序将部分工作:
1.java -Dfile.name=C:logdirectorypathlog4j-application.log -jar C:UsersmartinDesktopProjectsLog4jlog4j_example.jar
:包括 JVM 参数,.jar在已经定义的 JVM 参数路径内正确创建了日志文件;
2.java -jar C:UsersmartinDesktopProjectsLog4jlog4j_example.jar
:排除JVM参数,.jar无法理解它应该写在哪里,因此没有创建文件;
我期望在第二次尝试时,应用程序可以在同一个.jar文件夹中写入,因为${file.name}
参数未在 comand 行上定义。
这不起作用,因为似乎缺少一些东西来分配要写入的"默认"路径。
我还尝试在log4j.properties文件上设置log4j.appender.file.File=${file.name}/log4j.log
,将java -Dfile.name=C:logdirectorypath -jar C:UsersmartinDesktopProjectsLog4jlog4j_example.jar
作为逗号,并将log4j.log名称排除在路径之外。
Niether 这个尝试对我有用,因为系统引发了以下错误:
[...]
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: log4j.log (Access denied)
[...]
这次我期望框架可以在同一个.jar文件夹中写入,因为${file.name}
参数没有在 comand 行上定义,并且自动获取.jar文件的根目录(期望这是默认的写入文件夹(。
我使用的是 1.2.17 log4j 版本。
#in 属性文件放成这样
log4j.appender.file.File=./history.log