用户主目录中的log4j日志文件

Poo*_*rav 12 java log4j

我正在开发一个将在OSX和Windows上运行的应用程序.我希望将日志写入用户主目录.对于OSX,它将位于/ Users // Library/Application Support/MyApp/log目录下,并且位于windows下,具体取决于/ Users // AppData/MyApp/log目录下的版本.

我能做到这一点的最佳方式是什么?我已经四处寻找解决方案,但没有任何帮助,或者我正在使用的解决方案已经出现了.

期待您的投入.

编辑:由于日志文件的位置取决于操作系统,我希望找到一个运行时解决方案,可能如下所示

if (System.getProperty("os.name").contains("mac"))
    logFileLocation = System.getProperty("user.home") + "/Library/Application Support/MyApp/logs"
else
    logFileLocation = System.getenv("APPDATA") + "/MyApp/logs"
Run Code Online (Sandbox Code Playgroud)

谢谢

Obs*_*ver 19

更改ConsoleAppenderFileAppender.据我所知,写请求将被重定向到Windows操作系统上的appdata.关于MacOs不确定.

URL mySource = MyAppMainClass.class.getProtectionDomain().getCodeSource().getLocation();
File rootFolder = new File(mySource.getPath());
System.setProperty("app.root", rootFolder.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

并像这样编辑log4j配置

log4j.appender.NotConsole=org.apache.log4j.RollingFileAppender
log4j.appender.NotConsole.fileName=${app.root}/fileName.log
Run Code Online (Sandbox Code Playgroud)

或者用户家:

log4j.appender.NotConsole.fileName=${user.home}/fileName.log
Run Code Online (Sandbox Code Playgroud)

  • 对于 log4j2,需要使用 `${sys:user.home}`,请参阅 https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution (3认同)