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] [Comment Edited] (LOG4J2-649) Close a dynamically created appender
Date Mon, 16 Nov 2015 06:04:10 GMT

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

Ralph Goers edited comment on LOG4J2-649 at 11/16/15 6:03 AM:
--------------------------------------------------------------

I finally looked at it today. it is on the right track, but I do have a few issues. 
1. The new files are missing license headers. That isn't a big deal as I can just add them.

2. In the IdlePurgePolicy the purge method is called on every log event. That creates a calendar
object with the current time and compares that with the expire time as another calendar object.
This seems like it would have more overhead than comparing the expire time and current time
as Longs.
3. I introduced a scheduler into the configuration object and am currently making a few modifications
to it. It would seem to me that using the scheduler to periodically clean up the appenders
would be better than calling the purge method on every log event.

Also, we will need to add documentation about the PurgePolicy and IdlePurgePolicy to the RoutingAppender
documentation.


was (Author: ralph.goers@dslextreme.com):
I finally looked at it today. it is on the right track, but I do have a few issues. 
1. The new files are missing license headers. That isn't a big deal as I can just add them.

2. In the IdlePurgePolicy the purge method is called on every log event. That creates a calendar
object with the current time and compares that with the expire time as another calendar object.
This seems like it would have more overhead than comparing the expire time and current time
as Longs.
3. I introduced a scheduler into the configuration object and am currently making a few modifications
to it. It would seem to me that using the scheduler to periodically clean up the appenders
would be better than calling the purge method on every log event.

> Close a dynamically created appender
> ------------------------------------
>
>                 Key: LOG4J2-649
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-649
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: API, Appenders
>    Affects Versions: 2.0-rc1
>         Environment: Windows 7 (64-bit)
>            Reporter: Andrew Rose
>            Assignee: Ralph Goers
>
> I'm using the Routing functionality in Log4j 2 to dynamically create appenders at runtime.
When I know that those appenders are finished with, I'd like to tell Log4j so that it can
tidy up the related resources (flush & close files, free its internal objects related
to those appenders, etc.). Without doing this, Log4j still has open file handles and I'm unable
to manipulate the files that it has written (from an external process which post-processes
and archives the logs).
> Remko Popma tells me (via the stackoverflow answer at http://stackoverflow.com/a/23827382/799399)
that there is no way of doing this at the moment.  I'd like to request that you consider enhancing
Log4j 2 in this way.
> I enclose my configuration below, in case it's relevant (but I think all the details
you need are included in the above description).
> {code}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="WARN">
>   <Appenders>
>     <Console name="Console" target="SYSTEM_OUT">
>       <PatternLayout pattern="%d{HH:mm:ss.SSS} %level{ERROR=!, WARN=?, INFO=-, DEBUG=.,
TRACE=.} %msg%n"/>
>     </Console>
>     <Routing name="MatchLogs">
>       <Routes pattern="$${ctx:matchID}">
>         <Route>
>           <RandomAccessFile name="MatchLog-${ctx:matchID}" fileName="logs/${ctx:matchID}.log">
>             <PatternLayout pattern="%d{ISO8601} %-5level %-30.30logger{1} %msg%n"/>
>           </RandomAccessFile>
>         </Route>
>       </Routes>
>     </Routing>
>     <Async name="AsyncWrapper">
>       <AppenderRef ref="MatchLogs" level="debug"/>
>       <AppenderRef ref="Console" level = "info"/>
>     </Async>
>     <Routing name="MatchStatsLogs">
>       <Routes pattern="$${ctx:matchID}">
>         <Route>
>           <RandomAccessFile name="MatchStatsLog-${ctx:matchID}" fileName="logs/${ctx:matchID}_stats.log">
>             <PatternLayout pattern="%msg"/>
>           </RandomAccessFile>
>         </Route>
>       </Routes>
>     </Routing>
>     <Async name="AsyncStatsWrapper">
>       <AppenderRef ref="MatchStatsLogs" level="debug"/>
>     </Async>
>   </Appenders>
>   <Loggers>
>     <Logger name="stats" level="trace" additivity="false">
>       <AppenderRef ref="AsyncStatsWrapper"/>
>     </Logger>
>     <Root level="debug">
>       <AppenderRef ref="AsyncWrapper"/>
>     </Root>
>   </Loggers>
> </Configuration>
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message