@Test public void changeRoot_sets_level_of_ROOT_and_all_loggers_with_a_config_but_the_hardcoded_one() { LogLevelConfig config = newLogLevelConfig() .rootLevelFor(ProcessId.WEB_SERVER) .levelByDomain("foo", ProcessId.WEB_SERVER, LogDomain.JMX) .levelByDomain("bar", ProcessId.COMPUTE_ENGINE, LogDomain.ES) .immutableLevel("doh", Level.ERROR) .immutableLevel("pif", Level.TRACE) .build(); LoggerContext context = underTest.apply(config, props); assertThat(context.getLogger(ROOT_LOGGER_NAME).getLevel()).isEqualTo(Level.INFO); assertThat(context.getLogger("foo").getLevel()).isEqualTo(Level.INFO); assertThat(context.getLogger("bar").getLevel()).isEqualTo(Level.INFO); assertThat(context.getLogger("doh").getLevel()).isEqualTo(Level.ERROR); assertThat(context.getLogger("pif").getLevel()).isEqualTo(Level.TRACE); underTest.changeRoot(config, Level.DEBUG); assertThat(context.getLogger(ROOT_LOGGER_NAME).getLevel()).isEqualTo(Level.DEBUG); assertThat(context.getLogger("foo").getLevel()).isEqualTo(Level.DEBUG); assertThat(context.getLogger("bar").getLevel()).isEqualTo(Level.DEBUG); assertThat(context.getLogger("doh").getLevel()).isEqualTo(Level.ERROR); assertThat(context.getLogger("pif").getLevel()).isEqualTo(Level.TRACE); }
@Test public void builder_rootLevelFor_add_global_and_process_property_in_order_for_root_logger() { LogLevelConfig underTest = newBuilder(rootLoggerName).rootLevelFor(ProcessId.ELASTICSEARCH).build(); assertThat(underTest.getConfiguredByProperties()).hasSize(1); assertThat(underTest.getConfiguredByProperties().get(rootLoggerName)) .containsExactly("sonar.log.level", "sonar.log.level.es"); assertThat(underTest.getConfiguredByHardcodedLevel()).hasSize(0); }
@Test public void apply_sets_logger_to_INFO_if_no_property_is_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); LoggerContext context = underTest.apply(config, props); assertThat(context.getLogger(ROOT_LOGGER_NAME).getLevel()).isEqualTo(Level.INFO); }
public LoggerContext configure() { LoggerContext ctx = helper.getRootContext(); ctx.reset(); helper.enableJulChangePropagation(ctx); configureConsole(ctx); if (helper.isAllLogsToConsoleEnabled(appSettings.getProps()) || !appSettings.getProps().valueAsBoolean("sonar.wrapped", false)) { configureWithLogbackWritingToFile(ctx); } else { configureWithWrapperWritingToFile(ctx); } helper.apply( LogLevelConfig.newBuilder(helper.getRootLoggerName()) .rootLevelFor(ProcessId.APP) .immutableLevel("com.hazelcast", Level.toLevel("WARN")) .build(), appSettings.getProps()); return ctx; }
@Test public void apply_does_not_create_loggers_property_if_only_root_level_is_defined() { LogLevelConfig logLevelConfig = newLogLevelConfig().rootLevelFor(ProcessId.APP).build(); underTest.apply(logLevelConfig); assertThat(underTest.get().getProperty("loggers")).isNull(); }
@Test public void apply_sets_root_logger_to_process_property_over_global_property_if_both_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level", "DEBUG", "sonar.log.level.web", "TRACE"); underTest.apply(config); verifyRootLoggerLevel(underTest, Level.TRACE); }
@Test public void apply_fails_with_IAE_if_process_property_has_unsupported_level() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level.web", "ERROR"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("log level ERROR in property sonar.log.level.web is not a supported value (allowed levels are [TRACE, DEBUG, INFO])"); underTest.apply(config); }
@Test public void apply_sets_logger_to_globlal_property_if_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); props.set("sonar.log.level", "TRACE"); LoggerContext context = underTest.apply(config, props); assertThat(context.getLogger(ROOT_LOGGER_NAME).getLevel()).isEqualTo(Level.TRACE); }
@Test public void builder_rootLevelFor_fails_with_ProcessId_if_loggerName_is_null() { expectedException.expect(NullPointerException.class); expectedException.expectMessage("ProcessId can't be null"); underTest.rootLevelFor(null); }
@Test public void apply_creates_loggers_property_with_logger_names_ordered_but_root() { LogLevelConfig config = newLogLevelConfig() .rootLevelFor(ProcessId.WEB_SERVER) .levelByDomain("foo", ProcessId.WEB_SERVER, LogDomain.JMX) .levelByDomain("bar", ProcessId.COMPUTE_ENGINE, LogDomain.ES) .immutableLevel("doh", Level.ERROR) .immutableLevel("pif", Level.TRACE) .offUnlessTrace("fii") .build(); underTest.apply(config); assertThat(underTest.get().getProperty("loggers")).isEqualTo("bar,doh,fii,foo,pif"); }
@Test public void apply_sets_root_logger_to_process_property_if_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level.web", "DEBUG"); underTest.apply(config); verifyRootLoggerLevel(underTest, Level.DEBUG); }
@Test public void apply_sets_logger_to_process_property_if_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); props.set("sonar.log.level.web", "DEBUG"); LoggerContext context = underTest.apply(config, props); assertThat(context.getLogger(ROOT_LOGGER_NAME).getLevel()).isEqualTo(Level.DEBUG); }
@Test public void builder_rootLevelFor_fails_with_ISE_if_called_twice() { underTest.rootLevelFor(ProcessId.ELASTICSEARCH); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Configuration by property already registered for " + rootLoggerName); underTest.rootLevelFor(ProcessId.WEB_SERVER); }
@Test public void apply_sets_root_logger_to_global_property_if_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level", "TRACE"); underTest.apply(config); verifyRootLoggerLevel(underTest, Level.TRACE); }
public Properties createProperties(Props props, File logDir) { Log4JPropertiesBuilder log4JPropertiesBuilder = new Log4JPropertiesBuilder(props); RootLoggerConfig config = newRootLoggerConfigBuilder().setProcessId(ProcessId.ELASTICSEARCH).build(); String logPattern = log4JPropertiesBuilder.buildLogPattern(config); log4JPropertiesBuilder.internalLogLevel(Level.ERROR); log4JPropertiesBuilder.configureGlobalFileLog(config, logDir, logPattern); log4JPropertiesBuilder.apply( LogLevelConfig.newBuilder(log4JPropertiesBuilder.getRootLoggerName()) .rootLevelFor(ProcessId.ELASTICSEARCH) .build()); return log4JPropertiesBuilder.get(); }
@Test public void apply_fails_with_IAE_if_process_property_has_unsupported_level() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); props.set("sonar.log.level.web", "ERROR"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("log level ERROR in property sonar.log.level.web is not a supported value (allowed levels are [TRACE, DEBUG, INFO])"); underTest.apply(config, props); }
@Test public void apply_sets_root_logger_to_INFO_if_no_property_is_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); underTest.apply(config); verifyRootLoggerLevel(underTest, Level.INFO); }
@Test public void apply_fails_with_IAE_if_global_property_has_unsupported_level() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level", "ERROR"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("log level ERROR in property sonar.log.level is not a supported value (allowed levels are [TRACE, DEBUG, INFO])"); underTest.apply(config); }
@Test public void apply_sets_logger_to_process_property_over_global_property_if_both_set() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); props.set("sonar.log.level", "DEBUG"); props.set("sonar.log.level.web", "TRACE"); LoggerContext context = underTest.apply(config, props); assertThat(context.getLogger(ROOT_LOGGER_NAME).getLevel()).isEqualTo(Level.TRACE); }
@Test public void apply_fails_with_IAE_if_global_property_has_unsupported_level() { LogLevelConfig config = newLogLevelConfig().rootLevelFor(ProcessId.WEB_SERVER).build(); props.set("sonar.log.level", "ERROR"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("log level ERROR in property sonar.log.level is not a supported value (allowed levels are [TRACE, DEBUG, INFO])"); underTest.apply(config, props); }