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

William Burns commented on LOG4J2-129:
--------------------------------------

Just reread your comment again.

I wanted to clarify on the Console Appender using a variable for the key.  The 
reason is because the replacement won't occur if the context value isn't 
present so then the console will be matched to thread contexts that don't have 
a value set for filename in this case.  Is there a better way you can recommend?

Thanks.
                
> RoutingAppender dynamic appender creation only creates 1
> --------------------------------------------------------
>
>                 Key: LOG4J2-129
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-129
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.0-beta3
>            Reporter: William Burns
>            Assignee: Ralph Goers
>             Fix For: 2.0-beta4
>
>         Attachments: LOG4J2-129-RoutingAppender.patch, 
> LOG4J2-129-RoutingAppenderTest.patch, patch
>
>
> I was looking through the new appenders and found RoutingAppender which 
> intrigued me
> http://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender
> From the documentation it seems that the RoutingAppender would create a new 
> appender dynamically every time the key didn't match an existing appender 
> name.  However when testing this I find it only creates the first dynamically 
> and then reuses that one as it is set to default.  That doesn't seem what I 
> would expect.  My example code is as the following:
> {code}
> public class TestRouting {
>     public static void main(String[] args) {
>         ThreadContext.put("filename", "foo.bar");
>         _logger.info("TEST");
>         ThreadContext.put("filename", "foo.bar2");
>         _logger.info("TEST2");
>         ThreadContext.remove("filename");
>     }
>     private final static Logger _logger = 
> LogManager.getLogger(TestRouting.class);
> }
> {code}
> Here is the log4j2 xml file it picks up.
> {code}
> <?xml version="1.0" encoding="UTF-8"?>
> <configuration>
>   <appenders>
>     <Console name="Console" target="SYSTEM_OUT">
>       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - 
> %msg%n"/>
>     </Console>
>   
>     <Routing name="RoutingAppender">
>       <Routes pattern="${ctx:filename}">
>         <Route>
>           <RollingFile name="Rolling-${ctx:filename}" 
> fileName="${ctx:filename}"
>                        filePattern="${ctx:filename}.%i.log.gz">
>             <PatternLayout>
>               <pattern>%d %p %C{1.} [%t] %m%n</pattern>
>             </PatternLayout>
>             <SizeBasedTriggeringPolicy size="500" />
>           </RollingFile>
>         </Route>
>       
>         <!-- By having this set to ${ctx:filename} it will match when filename
>              is not set in the context -->
>         <Route ref="Console" key="${ctx:filename}"/>
>       
>       </Routes>
>     </Routing>
>   </appenders>
>     
>   <loggers>
>     <root level="info">
>       <appender-ref ref="RoutingAppender"/>
>     </root>
>   </loggers>
> </configuration>
> {code}
> When I run the test though it only creates 1 file/appender with the name 
> foo.bar and logs both messages to it.  I would expect that it creates 2 files 
> where each gets the different message.
> Is there something I am missing about this or is this the intended behavior?
> I have a change that gets it working, however part of it is hack and would 
> need to be updated to the best alternative.  Also I had to change 
> BaseConfiguration slightly to make a defensive copy of the attributes.  It 
> seemed that was fine, otherwise the Route cannot be reused to make another 
> appender if it blows away the attributes, don't know if that will affect 
> other things though.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to