tags:

views:

409

answers:

2

I have some webservices in my application and i want to log them to diferent files, based on the webservice name. For that i am creating loggers with

myLogger = Logger.getLogger(logKey);

I am wondering if i should cache these loggers to avoid creating them for every call, or can i ignore the overhead.

+11  A: 

Loggers are already cached by log4j using the default log repository (Hierarchy). In other words, it's just a hashtable lookup.

However, in my experience you tend to make the logger static, so it only ends up being called once per class anyway.

Jon Skeet
+1 but it is more fun voting up people with less reputation
willcodejavaforfood
Wouldn't making the logger static prevent you from changing its level at runtime (through an MBean for example)?In theory not, but I thought that was the case with java logging.
Nicolas
I don't *think* so. I think the level stuff is checked dynamically, rather than being frozen in the constructed logger.
Jon Skeet
+6  A: 

This method Logger.getLogger(logKey) looks in logger cache for a logger with the name passed in logKey. If it doesn't exist it creates one. First call for a logger name, a Logger will be created but later calls will get it from cache so you don't need to handle this in your code.

Bhushan