[
https://issues.apache.org/jira/browse/LOG4J2-1919?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Xianyin Xin closed LOG4J2-1919.
-------------------------------
> Change the appender of a logger will affect other loggers
> ---------------------------------------------------------
>
> Key: LOG4J2-1919
> URL: https://issues.apache.org/jira/browse/LOG4J2-1919
> Project: Log4j 2
> Issue Type: Bug
> Reporter: Xianyin Xin
>
> {code}
> String logger1Name = Test.class.getName();
> String logger2Name = "fileLogger";
> Logger logger1 = LogManager.getLogger(logger1Name);
> Logger logger2 = LogManager.getLogger(logger2Name);
> Writer writer = null;
> try {
> writer = new PrintWriter(new FileOutputStream("D:/file.log"));
> } catch (FileNotFoundException e) {
> e.printStackTrace();
> }
> String fileAppender = "myFileAppender";
> LoggerContext loggerContext = (LoggerContext)
> LogManager.getContext(false);
> Configuration conf = loggerContext.getConfiguration();
> final PatternLayout layout = PatternLayout.createDefaultLayout(conf);
> final Appender appender = WriterAppender
> .createAppender(layout, null, writer, fileAppender, false, true);
> appender.start();
> // CHANGE ONLY the appender for logger2, but logger1 will be affected
> also:
> Map<String, Appender> appenderMap = conf.getAppenders();
> LoggerConfig config = conf.getLoggerConfig(logger2Name);
> for (Map.Entry<String, Appender> entry : appenderMap.entrySet()) {
> config.removeAppender(entry.getKey());
> }
> config.addAppender(appender, null, null);
> logger1.info("hahaha");
> logger2.info("hehehe");
> {code}
> The output in "D:file.log" reads,
> {quote}
> hahaha
> hehehe
> {quote}
> But the stdout appender for logger1 ouputs nothing.
> I don't know if it is the design. However, the LoggerConfig returned by
> {{conf.getLoggerConfig(logger_name)}} is in fact the {{PrivateConfig}} of
> logger2, which can be seen from {{Logger.removeAppender()}} and
> {{Logger.addAppender()}}.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)