2014-06-30 13 views
7

Ho cercato di configurare appender in modo programmatico, ma non ho avuto successo finora. voglio solo configurare appender senza file in modo che possa inviare i registri alla console o al file.Come configurare gli appendici o inizializzare la registrazione in log4j2 in modo programmatico?

String PATTERN = "%d [%p|%c|%C{1}] %m%n"; 
    PatternLayout layout = PatternLayout.createLayout(PATTERN, null, null, 
      null, null, null); 
    ConsoleAppender console = ConsoleAppender.createAppender(layout, null, 
      null, "console", "true", "true"); // create appender 

    AppenderRef appender = AppenderRef.createAppenderRef("console", 
      "DEBUG", null); 

    logger = (Logger) LogManager.getLogger(InitLogger.class); 
    LoggerContext context = logger.getContext(); 
    BaseConfiguration configuration =(BaseConfiguration) context.getConfiguration(); 
    configuration.addAppender(console); 
    logger.addAppender(configuration.getAppender("console")); 
+1

È necessario reimpostare e aggiungere i appenders al rootLogger. Vedi [questo post] (http://stackoverflow.com/questions/8965946/configuring-log4j-loggers-programmatically) – Stefan

+0

Questo post parla di log4j1, quindi questo non è utile. – Akhilesh

+1

Questo è stato possibile con l'aiuto di ConfigurationFactory di log4j2 [link] [1] [1]: http://stackoverflow.com/questions/20886717/configure-log4j2-programmatically-using-configurationfactory – Akhilesh

risposta

4

provare il seguente codice di esempio

import org.apache.logging.log4j.Level; 
import org.apache.logging.log4j.core.appender.ConsoleAppender; 
import org.apache.logging.log4j.core.config.AppenderRef; 
import org.apache.logging.log4j.core.config.Configuration; 
import org.apache.logging.log4j.core.config.LoggerConfig; 
import org.apache.logging.log4j.core.layout.PatternLayout; 
import org.apache.logging.log4j.spi.ExtendedLogger; 
import org.apache.logging.log4j.spi.LoggerContext; 

public class TestLog4j2 { 

    public static void main(String[] args) { 
     try { 

      ConsoleAppender console = ConsoleAppender.createAppender(PatternLayout.createDefaultLayout(), null, "SYSTEM_OUT", "console", null, null); 
      final LoggerContext ctx = (LoggerContext) new org.apache.logging.log4j.core.LoggerContext("console"); 
       final Configuration config = ((org.apache.logging.log4j.core.LoggerContext) ctx).getConfiguration(); 
       console.start(); 
       config.addAppender(console); 
       AppenderRef ref = AppenderRef.createAppenderRef("console", null, null); 
       AppenderRef[] refs = new AppenderRef[] {ref}; 
       LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.ALL, "org.apache.logging.log4j", 
        "true", refs, null, config, null); 
       loggerConfig.addAppender(console, null, null); 
       config.addLogger("org.apache.logging.log4j", loggerConfig); 
       ((org.apache.logging.log4j.core.LoggerContext) ctx).updateLoggers(); 
       ExtendedLogger logger = (ExtendedLogger) ctx.getLogger("console"); 
       logger.error("abc"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
6

Qui è il modo più semplice per farlo:

import org.apache.logging.log4j.Level; 
import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.apache.logging.log4j.core.LoggerContext; 
import org.apache.logging.log4j.core.appender.ConsoleAppender; 
import org.apache.logging.log4j.core.config.AbstractConfiguration; 
import org.apache.logging.log4j.core.config.AppenderRef; 
import org.apache.logging.log4j.core.config.LoggerConfig; 
import org.apache.logging.log4j.core.layout.PatternLayout; 

public class Main { 

    public static void main(String[] args) { 
     configure(); 
     Logger logger = LogManager.getLogger("com.company"); 
     logger.trace("Hello Word!"); 

    } 

    public static void configure() { 
     LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
     AbstractConfiguration config = (AbstractConfiguration) ctx.getConfiguration(); 
     ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(PatternLayout.createDefaultLayout()); 
     appender.start(); 
     config.addAppender(appender); 
     AppenderRef[] refs = new AppenderRef[] { AppenderRef.createAppenderRef(appender.getName(), null, null) }; 
     LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.ALL, LogManager.ROOT_LOGGER_NAME, "true", refs, null, config, null); 
     loggerConfig.addAppender(appender, null, null); 
     config.addLogger(LogManager.ROOT_LOGGER_NAME, loggerConfig); 
     ctx.updateLoggers(); 
    } 
} 
+0

Cosa ne pensi di rendere questo logger ASYNC? –

Problemi correlati