我有一个intellij java项目。
我已添加此log4j.properties
# Root logger option
log4j.rootLogger=INFO, file, stdout
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
如何将log4j.appender.file.File
设置为相对于我的项目位置?
如何将输出文件设置为:
src/main/resources/logs/log.txt
?
答案 0 :(得分:4)
您可以使用.\your file name
。
.\
用于指代您的项目位置。
e.g。 .\abc.log
,在eclipse的情况下,此文件存在于工作区的项目文件夹中。
对于jar,此文件将写入存在.jar文件的文件夹中。
答案 1 :(得分:0)
我无法通过在log4j.properties中设置正确的属性找到直接的解决方案。但是我可以提出两种解决方案。 首先,在属性中设置相对路径,使该路径不是相对于项目(或jar),而是从中运行应用程序的目录。因此,如果您正在创建一个调用jar的服务,它将从/etc/init.d目录中调用它,并且您的日志(很可能)将无处可用。
其中一个选项是设置一个环境变量,您希望获得日志。 Log4j处理环境变量。只需设置log4j.appender.file.File=${varname}
另一种选择,如果您使用shell脚本启动服务/ app / jar,请在运行之前cd到其目录(假设您的路径设置为log4j.appender.file.File=./logs/myOutput.log
)。像这样:
process="/path/to/your/jar/test.jar"
processName=`basename $process`
processDir=`dirname $process`
cd $processDir
java -jar "./$processName"
在这种情况下,您的日志将位于/path/to/your/jar/logs/myOutput.log
答案 2 :(得分:0)
将日志文件输出到jar相对目录的方式。
在java文件中设置一个jar目录到ThreadContext,
Path jarDir = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation()
.toURI()).getPath().getParent(); // get a jar directory
ThreadContext.put("jarDir", jarDir.toString()); // This needs to be done before `LogManager.getLogger()`
Logger logger = LogManager.getLogger();
并在配置文件中使用它。
<File name="File" fileName="${ctx:jarDir}/logfile.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %msg" charset="UTF-8" />
</File>
参考文献:
How to get the path of a running JAR file?
http://logging.apache.org/log4j/2.x/manual/thread-context.html
http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution