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

Uwe Schindler edited comment on SOLR-8324 at 11/21/15 12:02 AM:
----------------------------------------------------------------

You can do this since Java 7, I now use this anywhere. The code uses a "trick". 
You need a so-called caller-sensitive method (marked @CallerSensitive) and 
somehow get the class it detected. Since Java 7 you can use 
MethodHandles.lookup(). This returns a lookup for the class that called the 
Lookup factory. The lookup has the class it was created for - and voilá you can 
use it :-)

{code:java}
import java.lang.invoke.MethodHandles;
//...
private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
{code}

I use that pattern everywhere in my code now. Thanks also to the following blog 
post: 
http://marxsoftware.blogspot.de/2013/01/portable-logger-names-with-java7.html


was (Author: thetaphi):
You can do this since Java 7, I now use this anywhere. The code uses a "trick". 
You need a so-called caller-sensitive method (marked @CallerSensitive) and 
somehow get the class it detected. Since Java 7 you can use 
MethodHandles.lookup(). This returns a lookup for the class that called the 
Lookup factory. The lookup has the class it was created for - and voilá you can 
use it :-)

{code:java}
import java.lang.invoke.MethodHandles;
//...
private final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
{code}

I use that pattern everywhere in my code now. Thanks also to the following blog 
post: 
http://marxsoftware.blogspot.de/2013/01/portable-logger-names-with-java7.html

> Logger Untanglement
> -------------------
>
>                 Key: SOLR-8324
>                 URL: https://issues.apache.org/jira/browse/SOLR-8324
>             Project: Solr
>          Issue Type: Improvement
>            Reporter: Mike Drob
>             Fix For: Trunk
>
>
> I propose that we do a thorough examination of how we use loggers over the 
> whole project. There are many instances of loggers being shared between 
> classes that make troubleshooting difficult, and we can probably clean up 
> some of the usage that has accumulated over numerous code moves and 
> refactorings.
> Because this has the potential to scope wildly out of control, I would like 
> to break the work down into several subtasks.
> * Loggers should be declared all three of {{private static final}} when 
> possible. This both helps avoid the situations described in later bullets, 
> and might provide a very minor performance improvement.
> * Distinct classes should not use loggers from other classes, unless they are 
> explicitly delegated to do so.
> * Subclasses should declare their own loggers instead of relying on loggers 
> from parent classes.
> * Examine if forbidden-api or some other tool(s) can help maintain this, once 
> we reach a desired state.
> Each bullet might turn into one or more tasks, depending on how invasive 
> individual changes become.



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

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

Reply via email to