logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ralph Goers (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (LOG4J2-129) RoutingAppender dynamic appender creation only creates 1
Date Sat, 01 Dec 2012 22:49:58 GMT

     [ https://issues.apache.org/jira/browse/LOG4J2-129?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Ralph Goers resolved LOG4J2-129.

       Resolution: Fixed
    Fix Version/s: 2.0-beta4
         Assignee: Ralph Goers

The problem was that the code was treating the Appender being created under the default Route
as the default. That is incorrect. The code has been modified to just keep track of the default

Note that the configuration in your example is incorrect in that the key for "Console" needs
to be a value and not a variable. In addition, the variable declaration in the Routes pattern
should be $${ctx:filename}.

You can look at log4j-routing.xml for an example, however it is similar to the documentation
on the web site.

Please verify and close.
> 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, 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
> 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: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org

View raw message