2016-06-21 18 views
0

Obwohl ich mehrere andere Fragen und Antworten zu diesem Thema gelesen habe, habe ich die Antwort nicht gefunden und würde mich über jede Hilfe freuen.Log4J RollingFileAppender rollt Dateien nicht, wenn zwei Appender zu derselben Datei erstellt werden

public static void rerouteAppenderToFile(File file, Logger... log) { 
    for (Logger logger : log) { 
     rerouteAppenderToFile(file, logger); 
    } 
} 

public static void rerouteAppenderToFile(File file, Logger log) { 
    log.setAdditivity(false); 
    log.setLevel(Level.DEBUG); 
    RollingFileAppender fa = new RollingFileAppender(); 
    fa.setName("RollingFileAppender_" + log.getName()); 
    fa.setMaxBackupIndex(3); 
    fa.setMaxFileSize("20MB"); 
    File folder = file.getParentFile(); 
    folder.mkdirs(); 
    if (folder.exists() && folder.isDirectory()) { 
     fa.setFile(file.getAbsolutePath()); 
     fa.setLayout(new PatternLayout(LOGGER_PATTERN)); 
     fa.setThreshold(Level.DEBUG); 
     fa.setAppend(true); 
     fa.activateOptions(); 
     log.addAppender(fa); 
    } 
} 

Was ich versuche, hier zu erreichen, ist in der Lage, mehrere Logger (2 oder mehr) auf die gleiche Datei anhängen ein RollingFileAppender verwenden. Aus irgendeinem Grund werden die Dateien nicht gerollt und die Protokolle werden größer

Antwort

1

Das Problem ist, dass Sie mehrere RollingFileAppender s erstellen, die in die gleiche Datei schreiben.

Also auch wenn ein RollingFileAppender versucht, auf eine neue Datei zu überrollen, kann es dies nicht tun, da die Datei von den anderen RollingFileAppender s gesperrt ist. Sie können nur eine RollingFileAppender Instanz erstellen und die Logger auf diese einzelne Instanz umleiten.

Der folgende Code gibt die Idee, aber es wird nicht funktionieren, wenn Sie rerouteAppenderToFile() mehrmals für eine einzelne Datei aufrufen.

public static void rerouteAppenderToFile(File file, Logger... log) { 
    RollingFileAppender fa = createAppender(file); 
    for (Logger logger : log) { 
     rerouteAppenderToFile(f, logger); 
    } 
} 

public static Appender createAppender(File file) { 
    RollingFileAppender fa = new RollingFileAppender(); 
    fa.setName("RollingFileAppender_" + log.getName()); 
    fa.setMaxBackupIndex(3); 
    fa.setMaxFileSize("20MB"); 
    File folder = file.getParentFile(); 
    folder.mkdirs(); 
    fa.setFile(file.getAbsolutePath()); 
    fa.setLayout(new PatternLayout(LOGGER_PATTERN)); 
    fa.setThreshold(Level.DEBUG); 
    fa.setAppend(true); 
    fa.activateOptions(); 
    return fa; 
} 

public static void rerouteAppenderToFile(Appender fa, Logger log) { 
    log.setAdditivity(false); 
    log.setLevel(Level.DEBUG); 
    log.addAppender(fa); 
} 
+0

Vielen Dank, es löste das Problem, ich schätze es –