static { ClassLoader prevLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(TCLoggingLog4J.class.getClassLoader()); Log4jSafeInit.init(); Logger customerLogger = Logger.getLogger(CUSTOMER_LOGGER_NAMESPACE); Logger consoleLogger = Logger.getLogger(CONSOLE_LOGGER_NAME); console = new TCLoggerImpl(CONSOLE_LOGGER_NAME); consoleAppender = new TCConsoleAppender(new PatternLayout(CONSOLE_PATTERN), ConsoleAppender.SYSTEM_OUT); operatorEventLogger = new TCLoggerImpl(OPERATOR_EVENT_LOGGER_NAME); List<Logger> internalLoggers = new ArrayList<Logger>(); for (String nameSpace : INTERNAL_LOGGER_NAMESPACES) { internalLoggers.add(Logger.getLogger(nameSpace)); } /** * Don't add consoleLogger to allLoggers because it's a child of customerLogger, so it shouldn't * get any appenders. If you DO add consoleLogger here, you'll see duplicate messages in the log * file. */ allLoggers = createAllLoggerList(internalLoggers, customerLogger); try { boolean customLogging = customConfiguration(); boolean isDev = customLogging ? false : developmentConfiguration(); if (!customLogging) { for (Logger internalLogger : internalLoggers) { internalLogger.setLevel(Level.INFO); } customerLogger.setLevel(Level.INFO); consoleLogger.setLevel(Level.INFO); if (!isDev) { // Only the console logger goes to the console (by default) consoleLogger.addAppender(consoleAppender); } else { consoleAppender.setLayout(new PatternLayout(CONSOLE_PATTERN_DEVELOPMENT)); // For non-customer environments, send all logging to the console... Logger.getRootLogger().addAppender(consoleAppender); } } delegateFileAppender = new DelegatingAppender(new NullAppender()); addToAllLoggers(delegateFileAppender); BufferingAppender realBufferingAppender; realBufferingAppender = new BufferingAppender(MAX_BUFFERED_LOG_MESSAGES); realBufferingAppender.setName("buffering appender"); delegateBufferingAppender = new DelegatingAppender(realBufferingAppender); addToAllLoggers(delegateBufferingAppender); buffering = true; if (!isDev) { console.info("New logging session started."); } writeVersion(); writePID(); writeLoggingConfigurations(); } finally { Thread.currentThread().setContextClassLoader(prevLoader); } }