Java 不同的日志位置取决于操作系统

Java 不同的日志位置取决于操作系统,java,tomcat,log4j,log4j2,Java,Tomcat,Log4j,Log4j2,我需要在windows中的C:\.DS\logs和Linux中的/.DS/logs中存储日志文件 我找到了这样做的方法:我需要在log4j配置文件中使用System.setProperty(“logs.dir”,…)和${logs.dir} 然而,问题是,log4j在这一点上已经初始化,它没有获取我的系统属性 如果我不需要手动重新初始化log4j,有没有更直接的方法来实现这一点 感谢使用log4j2.xml配置中的属性查找 可用系统属性 //在log4j2配置中定义 ${sys:file.se

我需要在windows中的
C:\.DS\logs
和Linux中的
/.DS/logs
中存储日志文件

我找到了这样做的方法:我需要在log4j配置文件中使用
System.setProperty(“logs.dir”,…)
${logs.dir}

然而,问题是,log4j在这一点上已经初始化,它没有获取我的系统属性

如果我不需要手动重新初始化log4j,有没有更直接的方法来实现这一点


感谢使用log4j2.xml配置中的属性查找

可用系统属性

//在log4j2配置中定义
${sys:file.separator}
部分路径${LS}部分路径${LS}

然后在文件的路径中

<RollingFile name="FILE_LOG" fileName="${LOG_DIR}file.log"

答案应该对您有帮助。如果log4j配置中有一个“if”语句,那将非常有用,这样我就可以检查${sys:os.name}.toLower().contains(“win”)并将根路径设置为“C:\”或“/”。有吗?:)对不起,我以为问题只是线路分隔符。您可以创建一个默认属性/。如果在windows上运行程序,请在命令行-DrootPath=“C:\”上传入一个参数,如果使用${sys:rootPath}查找该值,它将覆盖默认值。不幸的是,它没有避免命令行参数。根据这篇文章,配置中不支持逻辑:/最后我决定将日志存储在${user.home}\.DS\logs中。我已经接受了你的答案,但你可能应该在Windows和Linux上将“path.separator”编辑为“file.separator”--path.separator是“;“在Linux上,如果他们用诸如“C:\foo\bar”、“var/bar/foo”这样的例子提问,这样的问题会更好。
<RollingFile name="FILE_LOG" fileName="${LOG_DIR}file.log"