log4j logfil i brugerens hjemmemappe
Skift ConsoleAppender
til en FileAppender
. Så vidt jeg ved vil skriveanmodningen blive omdirigeret til appdata på Windows OS. Ikke sikker på MacO'er.
URL mySource = MyAppMainClass.class.getProtectionDomain().getCodeSource().getLocation();
File rootFolder = new File(mySource.getPath());
System.setProperty("app.root", rootFolder.getAbsolutePath());
og rediger log4j-konfigurationen sådan her
log4j.appender.NotConsole=org.apache.log4j.RollingFileAppender
log4j.appender.NotConsole.fileName=${app.root}/fileName.log
eller for brugerens hjem:
// log4j 1.*
log4j.appender.NotConsole.fileName=${user.home}/fileName.log
// log4j 2.*
log4j.appender.NotConsole.fileName=${sys:user.home}/fileName.log
Bemærk at log4j 2 kræver sys:
præfiks - takket være @sgrubsmyon
Tak til jer alle for inputs. baseret på antydningen, som Alex foreslog, gik jeg med følgende tilgang,
I log4j.properties havde jeg følgende konfiguration
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=${userApp.root}/logs/myapp.log
og i starten af ansøgningen har jeg gjort dette.
System.setProperty("userApp.root", getUserAppDirectory());
metoden getUserAppDirectory() er defineret som
static String getUserAppDirectory() {
if (isMacOS())
return System.getProperty("user.home") + "/Library/Application Support/myapp";
else
return System.getenv("APPDATA") + "/myapp";
}