/** * Given an appender name, as configured, get the parent directory of the appender's log file. * Note that if anything goes wrong, this will throw an Error and exit. */ private String logRootDir(String appenderName) { Appender appender = ((LoggerContext) LogManager.getContext()).getConfiguration().getAppender(appenderName); if (appenderName != null && appender != null && RollingFileAppender.class.isInstance(appender)) { return new File(((RollingFileAppender) appender).getFileName()).getParent(); } else { throw new RuntimeException("Log viewer could not find configured appender, or the appender is not a FileAppender. " + "Please check that the appender name configured in storm and log4j agree."); } }
@Override public void activateAppenderWithSizeRolling(String productName, String file, String encoding, String size, int maxBackupIndex) { org.apache.logging.log4j.core.appender.RollingFileAppender appender = RollingFileAppender.newBuilder() .withName(productName + "." + file.replace(File.separatorChar, '.') + ".Appender") .withFileName(LoggerHelper.getLogFileP(productName, file)) .withAppend(true) .withBufferedIo(true) .setConfiguration(configuration) .withFilePattern(LoggerHelper.getLogFile(productName, file) + ".%i") .withLayout(buildLayout(encoding)) .withCreateOnDemand(false) .withPolicy(SizeBasedTriggeringPolicy.createPolicy(size)) .withStrategy(DefaultRolloverStrategy .createStrategy(String.valueOf(maxBackupIndex), "1", "max", null, null, false, configuration)) .build(); appender.start(); removeAllAppenders(logger); logger.addAppender(appender); setProductName(productName); }
/** * Not a real test, just make sure we can compile access to the typed manager. * * @throws IOException */ @Test public void testAccessManagerWithStrings() throws IOException { try (final LoggerContext ctx = LoggerContext.getContext(false)) { final Configuration config = ctx.getConfiguration(); final File file = File.createTempFile("RollingFileAppenderAccessTest", ".tmp"); file.deleteOnExit(); final RollingFileAppender appender = RollingFileAppender.createAppender(file.getCanonicalPath(), "FilePattern", null, "Name", null, null, null, OnStartupTriggeringPolicy.createPolicy(1), null, null, null, null, null, null, config); final RollingFileManager manager = appender.getManager(); // Since the RolloverStrategy and TriggeringPolicy are immutable, we could also use generics to type their // access. Assert.assertNotNull(manager.getRolloverStrategy()); Assert.assertNotNull(manager.getTriggeringPolicy()); } } }
@Test public void testHostname() { final org.apache.logging.log4j.Logger testLogger = context.getLogger("org.apache.logging.log4j.hosttest"); testLogger.debug("Hello, {}", "World"); final List<String> msgs = host.getMessages(); assertThat(msgs, hasSize(1)); String expected = NetUtils.getLocalHostname() + Strings.LINE_SEPARATOR; assertThat(msgs.get(0), endsWith(expected)); assertNotNull("No Host FileAppender file name", hostFile.getFileName()); expected = "target/" + NetUtils.getLocalHostname() + ".log"; String name = hostFile.getFileName(); assertEquals("Incorrect HostFile FileAppender file name - expected " + expected + " actual - " + name, name, expected); name = hostFile.getFilePattern(); assertNotNull("No file pattern", name); expected = "target/" + NetUtils.getLocalHostname() + "-%d{MM-dd-yyyy}-%i.log"; assertEquals("Incorrect HostFile FileAppender file pattern - expected " + expected + " actual - " + name, name, expected); } }
/** * Tests https://issues.apache.org/jira/browse/LOG4J2-1620 */ @Test public void testDefaultImmediateFlush() { Assert.assertTrue(RollingFileAppender.newBuilder().isImmediateFlush()); } }
private RollingFileAppender createRollingFileAppender(String logFilePath, String filePattern, String appenderName, Configuration configuration) { TriggeringPolicy triggeringPolicy = createPolicy("1", "true"); RolloverStrategy rolloverStrategy = createStrategy("30", "1", null, String.valueOf(NO_COMPRESSION), null, true, configuration); return RollingFileAppender.createAppender(logFilePath, logFilePath + filePattern, "true", appenderName, "true", null, null, triggeringPolicy, rolloverStrategy, createLayout(configuration), null, null, null, null, configuration); }
/** * Not a real test, just make sure we can compile access to the typed manager. * * @throws IOException */ @Test public void testAccessManagerWithBuilder() throws IOException { try (final LoggerContext ctx = LoggerContext.getContext(false)) { final Configuration config = ctx.getConfiguration(); final File file = File.createTempFile("RollingFileAppenderAccessTest", ".tmp"); file.deleteOnExit(); // @formatter:off final RollingFileAppender appender = RollingFileAppender.newBuilder() .withFileName(file.getCanonicalPath()) .withFilePattern("FilePattern") .withName("Name") .withPolicy(OnStartupTriggeringPolicy.createPolicy(1)) .setConfiguration(config) .build(); // @formatter:on final RollingFileManager manager = appender.getManager(); // Since the RolloverStrategy and TriggeringPolicy are immutable, we could also use generics to type their // access. Assert.assertNotNull(manager.getRolloverStrategy()); Assert.assertNotNull(manager.getTriggeringPolicy()); } }
@Test public void testDefaultLayout() throws Exception { // @formatter:off Assert.assertNotNull(RollingFileAppender.newBuilder() .withName(RollingFileAppenderLayoutTest.class.getName()) .setConfiguration(new DefaultConfiguration()) .withFileName("log.txt") .withFilePattern("FilePattern") .withPolicy(OnStartupTriggeringPolicy.createPolicy(1)) .withCreateOnDemand(true) // no need to clutter up test folder with another file .build().getLayout()); // @formatter:on } }
final TriggeringPolicy policy = app.getManager().getTriggeringPolicy(); assertNotNull("No triggering policy", policy); assertTrue("Incorrect policy type", policy instanceof CronTriggeringPolicy);
private void validateAppender(final LoggerContext loggerContext, final String expectedFilePattern) { final RollingFileAppender appender = loggerContext.getConfiguration().getAppender("fooAppender"); Assert.assertNotNull(appender); Assert.assertEquals(expectedFilePattern, appender.getFilePattern()); LogManager.getLogger("root").info("just to show it works."); } }
builder.append(FILE_PARAM, ((RollingFileAppender) appender).getFileName()); builder.append(FILE_PATTERN_PARAM, ((RollingFileAppender) appender).getFilePattern());
private void testBuilder() { // @formatter:off final RollingFileAppender raf = RollingFileAppender.newBuilder() .withName("test1") .withFileName("target/testcmd1.log") .withFilePattern("target/testcmd1.log.%d{yyyy-MM-dd}") .withPolicy(createPolicy()) .withStrategy(createStrategy()) .setConfiguration(configuration) .build(); // @formatter:on Assert.assertNotNull(raf); }
private static RollingFileAppender createRollingFileAppender(String logFilePath, String filePattern, String appenderName, Configuration configuration) { TriggeringPolicy triggeringPolicy = TimeBasedTriggeringPolicy.createPolicy("1", "true"); RolloverStrategy rolloverStrategy = DefaultRolloverStrategy.createStrategy("30", "1", null, String.valueOf(Deflater.NO_COMPRESSION), configuration); return RollingFileAppender.createAppender(logFilePath, logFilePath + filePattern, "true", appenderName, "true", null, null, triggeringPolicy, rolloverStrategy, createLayout(configuration), null, null, null, null, configuration); }
@Test public void testIsCreateOnDemand() { final RollingFileAppender rfAppender = loggerContextRule.getRequiredAppender("RollingFile", RollingFileAppender.class); final RollingFileManager manager = rfAppender.getManager(); Assert.assertNotNull(manager); Assert.assertEquals(createOnDemand, manager.isCreateOnDemand()); }
@Override public void activateAppender(String productName, String file, String encoding) { org.apache.logging.log4j.core.appender.RollingFileAppender appender = RollingFileAppender.newBuilder() .withName(productName + "." + file.replace(File.separatorChar, '.') + ".Appender") .withFileName(LoggerHelper.getLogFileP(productName, file)) .withAppend(true) .withBufferedIo(true) .setConfiguration(configuration) .withFilePattern(LoggerHelper.getLogFile(productName, file) + ".%d{yyyy-MM-dd}") .withLayout(buildLayout(encoding)) .withCreateOnDemand(false) .withPolicy(TimeBasedTriggeringPolicy.createPolicy("1", "true")) .withStrategy(DefaultRolloverStrategy.createStrategy(null, null, "nomax", null, null, false, configuration)) .build(); appender.start(); removeAllAppenders(logger); logger.addAppender(appender); setProductName(productName); }
public void localJobDebugger(int exitVal, String taskId) { StringBuilder sb = new StringBuilder(); sb.append("\n"); sb.append("Task failed!\n"); sb.append("Task ID:\n " + taskId + "\n\n"); sb.append("Logs:\n"); console.printError(sb.toString()); for (Appender appender : ((Logger) LogManager.getRootLogger()).getAppenders().values()) { if (appender instanceof FileAppender) { console.printError(((FileAppender) appender).getFileName()); } else if (appender instanceof RollingFileAppender) { console.printError(((RollingFileAppender) appender).getFileName()); } } }
private RollingFileAppender createRollingFileAppender(String logFilePath, String filePattern, String appenderName, Configuration configuration) { return RollingFileAppender.newBuilder() .withFileName(logFilePath) .withFilePattern(logFilePath + filePattern) .withAppend(true) .withName(appenderName).withBufferedIo(true) .withPolicy(TimeBasedTriggeringPolicy.newBuilder() .withInterval(getInteger(MULE_LOG_DEFAULT_POLICY_INTERVAL, 1)) .withModulate(true) .build()) .withStrategy(DefaultRolloverStrategy.newBuilder() .withMax(getProperty(MULE_LOG_DEFAULT_STRATEGY_MAX, "30")) .withMin(getProperty(MULE_LOG_DEFAULT_STRATEGY_MIN, "1")) .withCompressionLevelStr(String.valueOf(NO_COMPRESSION)) .withStopCustomActionsOnError(true) .withConfig(configuration) .build()) .withLayout(createLayout(configuration)) .setConfiguration(configuration) .build(); }
private RollingFileAppender createRollingFileAppender(String logFilePath, String filePattern, String appenderName, Configuration configuration) { TriggeringPolicy triggeringPolicy = TimeBasedTriggeringPolicy.createPolicy("1", "true"); RolloverStrategy rolloverStrategy = DefaultRolloverStrategy.createStrategy("30", "1", null, String.valueOf(Deflater.NO_COMPRESSION), null, true, configuration); return RollingFileAppender.createAppender(logFilePath, logFilePath + filePattern, "true", appenderName, "true", null, null, triggeringPolicy, rolloverStrategy, createLayout(configuration), null, null, null, null, configuration); }
final TriggeringPolicy policy = app.getManager().getTriggeringPolicy(); assertNotNull("No triggering policy", policy); assertTrue("Incorrect policy type", policy instanceof CronTriggeringPolicy);
@Override public void activateAppenderWithTimeAndSizeRolling(String productName, String file, String encoding, String size, String datePattern, int maxBackupIndex) { org.apache.logging.log4j.core.appender.RollingFileAppender appender = RollingFileAppender.newBuilder() .withName(productName + "." + file.replace(File.separatorChar, '.') + ".Appender") .withFileName(LoggerHelper.getLogFileP(productName, file)) .withAppend(true) .withBufferedIo(true) .setConfiguration(configuration) .withFilePattern(LoggerHelper.getLogFile(productName, file) + ".%d{" + datePattern + "}.%i") .withLayout(buildLayout(encoding)) .withCreateOnDemand(false) .withPolicy(CompositeTriggeringPolicy.createPolicy(TimeBasedTriggeringPolicy.createPolicy("1", "true"), SizeBasedTriggeringPolicy.createPolicy(size))) .withStrategy(DefaultRolloverStrategy .createStrategy(String.valueOf(maxBackupIndex), "1", "max", null, null, false, configuration)) .build(); appender.start(); removeAllAppenders(logger); logger.addAppender(appender); setProductName(productName); }