package alma.acs.logging; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import alma.acs.logging.config.LogConfig; import alma.acs.logging.formatters.AcsXMLLogFormatter; /** * An <code>AcsLogger</code> that prints to stdout the XML messages that normally * would be sent to the remote Log service. * <p> * The purpose of this class is to allow testing AcsLogger functionality * without the need for a running ACS infrastructure, which would typically be accessed using * the class ComponentClient that only builds in a later module (jcont). * * @author hsommer */ public class LocalOnlyAcsLogger extends AcsLogger { private static LocalOnlyAcsLogger instance; private LocalOnlyAcsLogger(String namespace, LogConfig testLogConfig) { super(namespace, null, testLogConfig); addLoggerClass(LocalOnlyAcsLogger.class); } public static synchronized LocalOnlyAcsLogger getInstance(String namespace, Level level) { if (instance == null) { LogConfig testLogConfig = new LogConfig(); testLogConfig.setDefaultMinLogLevelLocal(AcsLogLevel.getNativeLevel(level).getAcsLevel()); instance = new LocalOnlyAcsLogger(namespace, testLogConfig); instance.setUseParentHandlers(false); Handler logHandler = new StdOutConsoleHandler(testLogConfig, namespace, null); logHandler.setFormatter(new AcsXMLLogFormatter() { public String format(LogRecord lr) { String xml = super.format(lr); return xml + '\n'; } }); logHandler.setLevel(level); instance.addHandler(logHandler); } return instance; } }