[slf4j-user] Best practice on declaring Loggers

whoman at exemail.com.au whoman at exemail.com.au
Wed Jun 14 03:17:35 CEST 2006


Gday all,
This would seem to imply that to log in static methods we should issue a 
LoggerFactory.getLogger() on every invocation  and thus be able to log into 
the correct context. Is this accurate, assuming it's not an often used method.
Cheers,
Will

At 06:12 AM 14/06/2006, you wrote:


>At 12:30 PM 6/13/2006, Konstantinos Karadamoglou wrote:
>>Hello all,
>>
>>Which is the best practice of declaring Loggers? For instance, should 
>>they be static, private, final? and why?
>
>I recommend that loggers members be declared as instance variables instead 
>of static.
>
>Static logger members cost a single variable reference for all instances 
>of the class whereas an instance logger member will cost a variable 
>reference for every instance of the class. For simple classes instantiated 
>thousands of times there might be a noticeable difference.
>
>However, more recent logging systems, e.g log4j or logback, support a 
>distinct logger context for each application running in the application 
>server. Thus, even if a single copy of log4j.jar or logback-classic.jar is 
>deployed in the server, the logging system will be able to differentiate 
>between applications and offer a distinct logging environment for each 
>application.
>
>More specifically, each time a logger is retrieved by invoking 
>LoggerFactory.getLogger() method, the underlying logging system will 
>return an instance appropriate for the current application. Please note 
>that within the same application retrieving a logger by a given name will 
>always return the same logger.
>
>If the logger is static, then it will only be retrieved once when the 
>hosting class is loaded into memory. If the hosting class is used in only 
>in one application, there is not much to be concerned about. However, if 
>the hosting class is shared between several applications, then all 
>instances of the shared class will log into the context of the application 
>which happened to fist load the shared class into memory.
>
>In summary, except for classes with few members and instantiated very 
>frequently, logger members should be instance variables.
>
>I hope this helps,
>
>--
>Ceki Gülcü
>http://ceki.blogspot.com/
>
>_______________________________________________
>user mailing list
>user at slf4j.org
>http://slf4j.org/mailman/listinfo/user
>






More information about the slf4j-user mailing list