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

David Johle commented on LOG4J2-112:
------------------------------------

Yes, there are some debates about the performance increases of using final for 
methods/classes...
A final method (or method of a class marked final) call can avoid some internal 
lookup steps because there is no need to check for overrides/etc.  However, 
several people point out that this sort of optimization is now performed 
automatically at runtime by some VMs for a class not marked final that is also 
not extended by anything.  So if that is the case, performance difference could 
become mostly irrelevant.

Furthermore, this is the rename action, which I believe is only called when a 
rollover is triggered, which is a relatively infrequent call (at least when 
comparing it to something like the logging event methods).  This just reduces 
the value of any marginal performance gains/losses that result from adding this 
capability.



Now, to expand further on this topic, I have run into a snag on my item #2 as 
well.  The purge() method is private, not protected.  So that means no 
extending on that front as well.
                
> Why is FileRenameAction a final class?
> --------------------------------------
>
>                 Key: LOG4J2-112
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-112
>             Project: Log4j 2
>          Issue Type: Question
>          Components: Core
>    Affects Versions: 2.0-beta2
>            Reporter: David Johle
>            Priority: Minor
>              Labels: features
>   Original Estimate: 5m
>  Remaining Estimate: 5m
>
> First some backstory:
> I have a special need to allow the use of a common/shared log file within a 
> clustered environment.  I have already taken other measures necessary to 
> handle the simultaneous writing of logging events to the same file w/o 
> corruption.  I have been using log4j 1.2.x for a while for this purpose, and 
> it's been working in a production environment for quite some time actually.
> What I did there is make my own DailyRollingSharedFileAppender (based on the 
> old DailyRollingFileAppender) that contains some custom logic & locking to 
> provide a safe mechanism for handling file rollovers on the shared files.
> I am currently in the process of upgrading to log4j2 for several reasons, and 
> as such am working to re-implement this concept by making a couple of custom 
> classes to augment log4j2 accordingly.  Given the new architecture (which is 
> very nice, BTW) I think this should actually a fairly straightforward 
> process...
> 1) Create a SharedFileRenameAction that extends FileRenameAction (has my 
> custom logic & locking)
> 2) Create a SharedFileRolloverStrategy that extends DefaultRolloverStrategy 
> (no gz/zip support, uses SharedFileRenameAction)
> 3) Reference SharedFileRolloverStrategy in log4j2.xml for the appenders using 
> shared files
> So for this, I only need to override a few things in these classes, and as 
> such I'd rather extend them than completely write new ones.  For #2 this is 
> not an issue, but for #1 I have hit a snag:
> public final class FileRenameAction extends ActionBase  
> (note: using beta-2 here, in trunk ActionBase is now AbstractAction)
> I've marked this issue as "Question" for now, so here is that question:
> Why is FileRenameAction marked final?
> If there was no intentional restriction on extensibility here, then I'd like 
> to make this issue an "Improvement" instead, requesting that this class no 
> longer have the final qualifier.

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