Java >> Java tutorial >  >> Tag >> Log4j

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";
}

Java tag