assertThat(config, is(instanceOf(AbstractConfiguration.class))); final AbstractConfiguration baseConfig = (AbstractConfiguration) config; final LoggerConfig root = baseConfig.getRootLogger(); final Map<String, Appender> rootAppenders = root.getAppenders(); assertThat("The root logger should only have one appender", rootAppenders, hasSize(1));
void deregister() { if (LogManager.getContext(false) instanceof LoggerContext) { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); if (ctx.getConfiguration() instanceof AbstractConfiguration) { final AbstractConfiguration config = (AbstractConfiguration) ctx.getConfiguration(); final Appender appender = getSingleton(); appender.stop(); config.removeAppender(appender.getName()); final Logger rootLogger = LogManager.getRootLogger(); final LoggerConfig loggerConfig = config.getLoggerConfig(rootLogger.getName()); loggerConfig.removeAppender(appender.getName()); ctx.updateLoggers(); } } }
void register() { if (LogManager.getContext(false) instanceof LoggerContext) { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); if (ctx.getConfiguration() instanceof AbstractConfiguration) { final AbstractConfiguration config = (AbstractConfiguration) ctx.getConfiguration(); final Appender appender = getSingleton(); appender.start(); config.addAppender(appender); final Logger rootLogger = LogManager.getRootLogger(); final LoggerConfig loggerConfig = config.getLoggerConfig(rootLogger.getName()); loggerConfig.addAppender(appender, null, null); ctx.updateLoggers(); } } }
config.addAppender(appender); LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.INFO, "com.company", "true", refs, null, config, null); loggerConfig.addAppender(appender, null, null); config.addLogger("com.company", loggerConfig); ctx.updateLoggers(); config.removeLogger("com.company"); config.removeAppender("Custom"); ctx.updateLoggers();
logGrabber.setLogEventList(logs); logConf.getRootLogger().addAppender(logGrabber, logConf.getRootLogger().getLevel(), null); logConf.removeAppender(logGrabber.getName());
protected void setToDefault() { // LOG4J2-1176 facilitate memory leak investigation setName(DefaultConfiguration.DEFAULT_NAME + "@" + Integer.toHexString(hashCode())); final Layout<? extends Serializable> layout = PatternLayout.newBuilder() .withPattern(DefaultConfiguration.DEFAULT_PATTERN) .withConfiguration(this) .build(); final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout); appender.start(); addAppender(appender); final LoggerConfig rootLoggerConfig = getRootLogger(); rootLoggerConfig.addAppender(appender, null, null); final Level defaultLevel = Level.ERROR; final String levelName = PropertiesUtil.getProperties().getStringProperty(DefaultConfiguration.DEFAULT_LEVEL, defaultLevel.name()); final Level level = Level.valueOf(levelName); rootLoggerConfig.setLevel(level != null ? level : defaultLevel); }
private void removeAppender(LoggerContext context, Appender appender) { ((AbstractConfiguration) context.getConfiguration()).removeAppender(appender.getName()); } }
protected void doConfigure() { preConfigure(rootNode); configurationScheduler.start(); if (rootNode.hasChildren() && rootNode.getChildren().get(0).getName().equalsIgnoreCase("Properties")) { final Node first = rootNode.getChildren().get(0); createConfiguration(first, null); if (first.getObject() != null) { subst.setVariableResolver((StrLookup) first.getObject()); final Map<String, String> map = this.getComponent(CONTEXT_PROPERTIES); final StrLookup lookup = map == null ? null : new MapLookup(map); subst.setVariableResolver(new Interpolator(lookup, pluginPackages)); createConfiguration(child, null); if (child.getObject() == null) { continue; appenders = child.getObject(); } else if (child.isInstanceOf(Filter.class)) { addFilter(child.getObject(Filter.class)); } else if (child.getName().equalsIgnoreCase("Loggers")) { final Loggers l = child.getObject(); setToDefault(); return; } else if (!setRoot) { LOGGER.warn("No Root logger was configured, creating default ERROR-level Root logger with Console appender"); setToDefault(); setParents();
/** * Marks a LoggerConfig as additive. This method is synchronized in case a Logger with the same name is being * updated at the same time. * * Note: This method is not used when configuring via configuration. It is primarily used by unit tests. * * @param logger The Logger the Appender will be associated with. * @param additive True if the LoggerConfig should be additive, false otherwise. */ @Override public synchronized void setLoggerAdditive(final org.apache.logging.log4j.core.Logger logger, final boolean additive) { final String loggerName = logger.getName(); final LoggerConfig lc = getLoggerConfig(loggerName); if (lc.getName().equals(loggerName)) { lc.setAdditive(additive); } else { final LoggerConfig nlc = new LoggerConfig(loggerName, lc.getLevel(), additive); nlc.setParent(lc); loggerConfigs.putIfAbsent(loggerName, nlc); setParents(); logger.getContext().updateLoggers(); } }
ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(PatternLayout.createDefaultLayout()); appender.start(); config.addAppender(appender); AppenderRef[] refs = new AppenderRef[] { AppenderRef.createAppenderRef(appender.getName(), null, null) }; LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.ALL, LogManager.ROOT_LOGGER_NAME, "true", refs, null, config, null); loggerConfig.addAppender(appender, null, null); config.addLogger(LogManager.ROOT_LOGGER_NAME, loggerConfig); ctx.updateLoggers();
private void setParents() { for (final Map.Entry<String, LoggerConfig> entry : loggerConfigs.entrySet()) { final LoggerConfig logger = entry.getValue(); String key = entry.getKey(); if (!key.isEmpty()) { final int i = key.lastIndexOf('.'); if (i > 0) { key = key.substring(0, i); LoggerConfig parent = getLoggerConfig(key); if (parent == null) { parent = root; } logger.setParent(parent); } else { logger.setParent(root); } } } }
private void removeAppender(LoggerContext context, Appender appender) { ((AbstractConfiguration) context.getConfiguration()).removeAppender(appender.getName()); } }
/** * Associates an Appender with a LoggerConfig. This method is synchronized in case a Logger with the same name is * being updated at the same time. * * Note: This method is not used when configuring via configuration. It is primarily used by unit tests. * * @param logger The Logger the Appender will be associated with. * @param appender The Appender. */ @Override public synchronized void addLoggerAppender(final org.apache.logging.log4j.core.Logger logger, final Appender appender) { final String loggerName = logger.getName(); appenders.putIfAbsent(appender.getName(), appender); final LoggerConfig lc = getLoggerConfig(loggerName); if (lc.getName().equals(loggerName)) { lc.addAppender(appender, null, null); } else { final LoggerConfig nlc = new LoggerConfig(loggerName, lc.getLevel(), lc.isAdditive()); nlc.addAppender(appender, null, null); nlc.setParent(lc); loggerConfigs.putIfAbsent(loggerName, nlc); setParents(); logger.getContext().updateLoggers(); } }
@Override public void run() { LoggerConfig rootLogger = ((AbstractConfiguration) context.getConfiguration()).getRootLogger(); Collection<Appender> appenders = new ArrayList<>(); appenders.add(ConsoleAppender.createAppender(mock(Layout.class), null, null, "Console", null, null)); when(rootLogger.getAppenders().values()).thenReturn(appenders); contextConfigurer.configure(context); verify(context.getConfiguration(), never()).addAppender(any(ConsoleAppender.class)); verify(rootLogger, never()).addAppender(any(ConsoleAppender.class), same(Level.INFO), any(Filter.class)); } });
void deregister() { if (LogManager.getContext(false) instanceof LoggerContext) { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); if (ctx.getConfiguration() instanceof AbstractConfiguration) { final AbstractConfiguration config = (AbstractConfiguration) ctx.getConfiguration(); final Appender appender = getSingleton(); appender.stop(); config.removeAppender(appender.getName()); final Logger rootLogger = LogManager.getRootLogger(); final LoggerConfig loggerConfig = config.getLoggerConfig(rootLogger.getName()); loggerConfig.removeAppender(appender.getName()); ctx.updateLoggers(); } } }
private void removeAppender(LoggerContext context, Appender appender) { ((AbstractConfiguration) context.getConfiguration()).removeAppender(appender.getName()); } }
void register() { if (LogManager.getContext(false) instanceof LoggerContext) { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); if (ctx.getConfiguration() instanceof AbstractConfiguration) { final AbstractConfiguration config = (AbstractConfiguration) ctx.getConfiguration(); final Appender appender = getSingleton(); appender.start(); config.addAppender(appender); final Logger rootLogger = LogManager.getRootLogger(); final LoggerConfig loggerConfig = config.getLoggerConfig(rootLogger.getName()); loggerConfig.addAppender(appender, null, null); ctx.updateLoggers(); } } }
/** * Associates a Filter with a LoggerConfig. This method is synchronized in case a Logger with the same name is being * updated at the same time. * * Note: This method is not used when configuring via configuration. It is primarily used by unit tests. * * @param logger The Logger the Footer will be associated with. * @param filter The Filter. */ @Override public synchronized void addLoggerFilter(final org.apache.logging.log4j.core.Logger logger, final Filter filter) { final String loggerName = logger.getName(); final LoggerConfig lc = getLoggerConfig(loggerName); if (lc.getName().equals(loggerName)) { lc.addFilter(filter); } else { final LoggerConfig nlc = new LoggerConfig(loggerName, lc.getLevel(), lc.isAdditive()); nlc.addFilter(filter); nlc.setParent(lc); loggerConfigs.putIfAbsent(loggerName, nlc); setParents(); logger.getContext().updateLoggers(); } }
@Override public void run() { contextConfigurer.update(context); ArgumentCaptor<ConsoleAppender> appenderCaptor = ArgumentCaptor.forClass(ConsoleAppender.class); verify(context.getConfiguration()).addAppender(appenderCaptor.capture()); Appender forcedConsoleAppender = appenderCaptor.getValue(); assertThat(forcedConsoleAppender, notNullValue()); assertThat(forcedConsoleAppender.getName(), equalTo(FORCED_CONSOLE_APPENDER_NAME)); assertThat(forcedConsoleAppender.isStarted(), is(true)); LoggerConfig rootLogger = ((AbstractConfiguration) context.getConfiguration()).getRootLogger(); verify(rootLogger).addAppender(forcedConsoleAppender, Level.ALL, null); } });
private LoggerConfig getRootLogger(LoggerContext context) { return ((AbstractConfiguration) context.getConfiguration()).getRootLogger(); }