Roy's idea of using LoggerContextListener in conjunction with
websphere's DynamicCache makes sense as well.
On 31.05.2012 01:36, Roy Cronise wrote:
Chris, Since you are using websphere you could use the Dynamic cache
to push the logging levels around to all the servers in the cluster.
You would need to implement a LoggerContextListener to update the
Dynamic cache when a log level changes. Something like this:
public class LogbackContextListener implements LoggerContextListener {
private static final String LOG_ID = "LBLOG:";
public void onLevelChange(Logger logger, Level level) {
if (DynamicCacheAccessor.isCachingEnabled()) {
DistributedMap map = DynamicCacheAccessor.getDistributedMap();
map.put(LOG_ID + logger.getName(),
level,1,60,60,EntryInfo.SHARED_PUSH, null); //Update dynamic cache
and push to other servers
}
}
and a Dynamic Cache ChangeListener, something like this:
public class LogbackCacheChangeListener implements ChangeListener {
public void cacheEntryChanged(ChangeEvent changeEvent) {
if (ChangeEvent.LOCAL != changeEvent.getSourceOfChance()) {
//Level not changed on this server then nothing to do
if
(changeEvent.getId().toString().startswith(LogbackContextListener.LOG_ID))
{ //Log level changed in cache?
LoggerContext lc = (LoggerContext)
LoggerFactory.getILoggerFactory();
String loggerName =
changeEvent.getId().toString().substring(LogbackContextListener.LOG_ID.length());
Logger logger = lc.getLogger(loggerName);
logger.setLevel((Level)changeEvent.getValue());
//set logger level on server to what was pushed in cache.
}
}
}
Sorry for any typos...
Roy
--
Ceki
http://twitter.com/#!/ceki
_______________________________________________
Logback-user mailing list
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-user