[ 
https://issues.apache.org/jira/browse/LOG4J2-1919?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16023033#comment-16023033
 ] 

Ralph Goers commented on LOG4J2-1919:
-------------------------------------

First, please read http://logging.apache.org/log4j/2.x/manual/architecture.html.

You don't show your logging configuration so I can only guess at what is 
happening. When you call getLoggerConfig(loggerName) it is going to return the 
LoggerConfig that the Logger with that name is using. In this case I suspect it 
to be the root LoggerConfig. If you then modify that LoggerConfig you are 
modifying it for all Loggers that are using it. If neither logger1 or logger2 
has a LoggerConfig specifically for it then they will both be using the root 
LoggerConfig.

> 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)

Reply via email to