[slf4j-user] Best practice on declaring Loggers
Ceki Gülcü
listid at qos.ch
Tue Jun 13 22:12:59 CEST 2006
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/
More information about the slf4j-user
mailing list