2014-09-30 24 views
5

Sto utilizzando log4j2 in modo programmatico senza un file di configurazione, ma configurandolo nel codice. Sto cercando di utilizzare log4j2 RollingFileAppender per salvare gli ultimi 10 file di registro. Ho provato a limitare le dimensioni del file utilizzando lo SizeBasedTriggeringPolicy. La limitazione delle dimensioni funziona ma non crea vecchi file di registro e continua a eliminare e scrivere sul file di registro originale.Come eseguire la configurazione programmatica per log4j2 RollingFileAppender

public static void configLog() { 
     String dir = System.getProperty("java.io.tmpdir") + "test\\"; 
     final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
     final Configuration config = ctx.getConfiguration(); 
     PatternLayout layout = PatternLayout.newBuilder().withConfiguration(config).withPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN).build(); 
     SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy("1KB"); 
     DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy("10", "0", null, null, config); 
     RollingFileManager fileManager = RollingFileManager.getFileManager(dir + "log\\test.log", dir + "log\\test-%i.log", false, false, policy, strategy, null, layout, 128); 
     policy.initialize(fileManager); 
     RollingFileAppender appender = RollingFileAppender.createAppender(dir + "log\\test.log", dir + "log\\test-%i.log", 
       "false", "File", "false", "128", "true", policy, strategy, layout, (Filter) null, "false", "false", (String) null, config); 
     appender.start(); 
     config.addAppender(appender); 
     AppenderRef ref = AppenderRef.createAppenderRef("File", Level.INFO, null); 
     AppenderRef[] refs = new AppenderRef[] { ref }; 
     LoggerConfig loggerConfig = LoggerConfig.createLogger("true", Level.INFO, LogManager.ROOT_LOGGER_NAME, "true", 
       refs, null, config, null); 
     loggerConfig.addAppender(appender, Level.INFO, null); 
     config.addLogger(LogManager.ROOT_LOGGER_NAME, loggerConfig); 
     ctx.updateLoggers(); 
    } 

Non sono riuscito a trovare molti esempi di configurazione della registrazione con java ma ho bisogno della mia applicazione. L'esempio da cui ho preso la maggior parte del codice è qui http://logging.apache.org/log4j/2.x/manual/customconfig.html (la seconda parte del codice).

Perché non crea/salva i vecchi file di registro?

risposta

2

Anche se questa è una vecchia questione altri potrebbero trovare utile, credo che sia perché

RollingFileAppender.createAppender(dir + "log\\test.log", dir + "log\\test-%i.log", 
      "false", "File", "false", "128", "true", policy, strategy, layout, (Filter) null, "false", "false", (String) null, config); 

dovrebbe essere

RollingFileAppender.createAppender(dir + "log\\test.log", dir + "log\\test-%i.log", 
      "true", "File", "false", "128", "true", policy, strategy, layout, (Filter) null, "false", "false", (String) null, config); 

Il terzo argomento è l'opzione di aggiunta https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/RollingFileAppender.html

Problemi correlati