@Test public void apply_sets_domain_property_over_process_and_global_property_if_all_set() { LogLevelConfig config = newLogLevelConfig().levelByDomain("foo", ProcessId.WEB_SERVER, LogDomain.ES).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( "sonar.log.level", "DEBUG", "sonar.log.level.web", "DEBUG", "sonar.log.level.web.es", "TRACE"); underTest.apply(config); verifyLoggerProperties(underTest.get(), "foo", Level.TRACE); }
@Test public void apply_set_level_to_OFF_if_sonar_global_level_is_INFO() { setLevelToOff(Level.INFO); }
@Test public void apply_does_not_set_level_if_sonar_global_level_is_TRACE() { Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level", Level.TRACE.toString()); underTest.apply(newLogLevelConfig().offUnlessTrace("fii").build()); verifyNoLoggerProperties(underTest.get(), "fii"); }
@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 configureGlobalFileLog_sets_properties_for_size_rolling_policy_when_property_starts_with_size_colon_and_specified_max_number_of_files() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); String sizePattern = randomAlphanumeric(6); int maxFile = 1 + new Random().nextInt(10); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( ROLLING_POLICY_PROPERTY, "size:" + sizePattern, PROPERTY_MAX_FILES, valueOf(maxFile)); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); verifySizeRollingPolicy(underTest, logDir, logPattern, sizePattern, maxFile); }
@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 configureGlobalFileLog_sets_properties_for_time_rolling_policy_when_property_starts_with_time_colon_and_specified_max_number_of_files() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); String timePattern = randomAlphanumeric(6); int maxFile = 1 + new Random().nextInt(10); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( ROLLING_POLICY_PROPERTY, "time:" + timePattern, PROPERTY_MAX_FILES, valueOf(maxFile)); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); verifyTimeRollingPolicy(underTest, logDir, logPattern, timePattern, maxFile); }
@Test public void apply_set_level_to_OFF_if_sonar_global_level_is_not_set() { underTest.apply(newLogLevelConfig().offUnlessTrace("fii").build()); verifyLoggerProperties(underTest.get(), "fii", Level.OFF); }
@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 configureGlobalFileLog_sets_properties_for_no_rolling_policy_when_property_is_none() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( ROLLING_POLICY_PROPERTY, "none"); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); verifyPropertiesForConfigureGlobalFileLog(underTest.get(), "appender.file_es.type", "File", "appender.file_es.name", "file_es", "appender.file_es.fileName", new File(logDir, "es.log").getAbsolutePath(), "appender.file_es.layout.type", "PatternLayout", "appender.file_es.layout.pattern", logPattern, "rootLogger.appenderRef.file_es.ref", "file_es"); }
@Test public void configureGlobalFileLog_throws_MessageException_when_property_is_not_supported() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); String invalidPropertyValue = randomAlphanumeric(3); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( ROLLING_POLICY_PROPERTY, invalidPropertyValue); expectedException.expect(MessageException.class); expectedException.expectMessage("Unsupported value for property " + ROLLING_POLICY_PROPERTY + ": " + invalidPropertyValue); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); }
@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(); }
private void verifySizeRollingPolicy(Log4JPropertiesBuilder builder, File logDir, String logPattern, String sizePattern, int maxFiles) { verifyPropertiesForConfigureGlobalFileLog(builder.get(), "appender.file_es.type", "RollingFile", "appender.file_es.name", "file_es", "appender.file_es.filePattern", new File(logDir, "es.%i.log").getAbsolutePath(), "appender.file_es.fileName", new File(logDir, "es.log").getAbsolutePath(), "appender.file_es.layout.type", "PatternLayout", "appender.file_es.layout.pattern", logPattern, "appender.file_es.policies.type", "Policies", "appender.file_es.policies.size.type", "SizeBasedTriggeringPolicy", "appender.file_es.policies.size.size", sizePattern, "appender.file_es.strategy.type", "DefaultRolloverStrategy", "appender.file_es.strategy.max", valueOf(maxFiles), "rootLogger.appenderRef.file_es.ref", "file_es"); }
@Test public void configureGlobalFileLog_sets_properties_for_daily_time_rolling_policy_with_max_7_files_for_empty_props() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); verifyTimeRollingPolicy(underTest, logDir, logPattern, "yyyy-MM-dd", 7); }
@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); }
@Test public void apply_fails_with_IAE_if_domain_property_has_unsupported_level() { LogLevelConfig config = newLogLevelConfig().levelByDomain("foo", ProcessId.WEB_SERVER, LogDomain.JMX).build(); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder("sonar.log.level.web.jmx", "ERROR"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("log level ERROR in property sonar.log.level.web.jmx is not a supported value (allowed levels are [TRACE, DEBUG, INFO])"); underTest.apply(config); }
@Test public void configureGlobalFileLog_sets_properties_for_size_rolling_policy_with_max_7_files_when_property_starts_with_size_colon() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); String sizePattern = randomAlphanumeric(6); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( ROLLING_POLICY_PROPERTY, "size:" + sizePattern); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); verifySizeRollingPolicy(underTest, logDir, logPattern, sizePattern, 7); }
@Test public void configureGlobalFileLog_sets_properties_for_time_rolling_policy_with_max_7_files_when_property_starts_with_time_colon() throws Exception { File logDir = temporaryFolder.newFolder(); String logPattern = randomAlphanumeric(15); String timePattern = randomAlphanumeric(6); Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder( ROLLING_POLICY_PROPERTY, "time:" + timePattern); underTest.configureGlobalFileLog(esRootLoggerConfig, logDir, logPattern); verifyTimeRollingPolicy(underTest, logDir, logPattern, timePattern, 7); }
@Test @UseDataProvider("logbackLevels") public void apply_accepts_any_level_as_hardcoded_level(Level level) { LogLevelConfig config = newLogLevelConfig().immutableLevel("bar", level).build(); underTest.apply(config); verifyLoggerProperties(underTest.get(), "bar", level); }
@Test public void apply_fails_with_IAE_if_LogLevelConfig_does_not_have_rootLoggerName_of_Log4J() { Log4JPropertiesBuilder underTest = newLog4JPropertiesBuilder(); LogLevelConfig logLevelConfig = LogLevelConfig.newBuilder(randomAlphanumeric(2)).build(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Value of LogLevelConfig#rootLoggerName must be \"rootLogger\""); underTest.apply(logLevelConfig); }