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()); } } }
final Layout<String> layout = createPatternLayout(); final FileAppender appender = FileAppender.newBuilder() .withFileName(FILE_NAME) .withName("test") appender.start(); final File file = new File(FILE_NAME); assertTrue("Appender did not start", appender.isStarted()); Assert.assertNotEquals(createOnDemand, Files.exists(PATH)); long curLen = file.length(); .setTimeMillis(System.currentTimeMillis()).build(); try { appender.append(event); curLen = file.length(); assertTrue("File length: " + curLen, curLen > prevLen); appender.stop(); assertFalse("Appender did not stop", appender.isStarted());
/** * Add an appender to Log4j which sends all INFO+ messages to a separate file which will be used * later to scan for suspect strings. The pattern of the messages conforms to the original log * format so that hydra will be able to parse them. */ private static void addSuspectFileAppender(final String workspaceDir) { final String suspectFilename = new File(workspaceDir, SUSPECT_FILENAME).getAbsolutePath(); final LoggerContext appenderContext = ((org.apache.logging.log4j.core.Logger) LogManager .getLogger(Configuration.MAIN_LOGGER_NAME)) .getContext(); final PatternLayout layout = PatternLayout.createLayout( "[%level{lowerCase=true} %date{yyyy/MM/dd HH:mm:ss.SSS z} <%thread> tid=%tid] %message%n%throwable%n", null, null, null, Charset.defaultCharset(), true, false, "", ""); final FileAppender fileAppender = FileAppender.createAppender(suspectFilename, "true", "false", DUnitLauncher.class.getName(), "true", "false", "false", "0", layout, null, null, null, appenderContext.getConfiguration()); fileAppender.start(); LoggerConfig loggerConfig = appenderContext.getConfiguration().getLoggerConfig(Configuration.MAIN_LOGGER_NAME); loggerConfig.addAppender(fileAppender, Level.INFO, null); }
@Test public void testLazyCreate() throws Exception { final Layout<String> layout = createPatternLayout(); // @formatter:off final FileAppender appender = FileAppender.newBuilder() .withFileName(FILE_NAME) .withName("test") .withImmediateFlush(false) .withIgnoreExceptions(false) .withBufferedIo(false) .withBufferSize(1) .withLayout(layout) .withCreateOnDemand(createOnDemand) .build(); // @formatter:on Assert.assertEquals(createOnDemand, appender.getManager().isCreateOnDemand()); try { Assert.assertNotEquals(createOnDemand, Files.exists(PATH)); appender.start(); Assert.assertNotEquals(createOnDemand, Files.exists(PATH)); } finally { appender.stop(); } Assert.assertNotEquals(createOnDemand, Files.exists(PATH)); }
/** * Tests https://issues.apache.org/jira/browse/LOG4J2-1620 */ @Test public void testDefaultImmediateFlush() { Assert.assertTrue(FileAppender.newBuilder().isImmediateFlush()); } }
.build(); final FileAppender appender = FileAppender.newBuilder() .withFileName(LOG_FILE) .withAppend(false) .build(); appender.start(); config.addAppender(appender); final AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
appenderBuilder.withLayout(layout); FileAppender appender = appenderBuilder.build(); appender.start(); context.getRootLogger().addAppender(appender);
public static void appendFileLogger(Level level, String name, Path filePath) { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); final Configuration config = ctx.getConfiguration(); Layout layout = PatternLayout.createLayout("%d{HH:mm} [%-5p] %msg%n", null, config, null, null, true, false, null, null); Appender appender = FileAppender.createAppender(filePath.toFile().getAbsolutePath(), "true", "false", name, "true", "false", "false", "8192", layout, null, "false", null, config); appender.start(); config.getRootLogger().addAppender(appender, level, null); ctx.updateLoggers(); }
/** * Validates that the code pattern we use to add an appender on the fly * works with a basic appender that is not the new OutputStream appender or * new Writer appender. */ @Test public void testUpdatePatternWithFileAppender() { final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); final Configuration config = ctx.getConfiguration(); // @formatter:off final Appender appender = FileAppender.newBuilder() .withFileName("target/" + getClass().getName() + ".log") .withAppend(false) .withName("File") .withIgnoreExceptions(false) .withBufferedIo(false) .withBufferSize(4000) .setConfiguration(config) .build(); // @formatter:on appender.start(); config.addAppender(appender); ConfigurationTestUtils.updateLoggers(appender, config); LogManager.getLogger().error("FOO MSG"); } }
@Test public void testFileName() { final String name = fileApp.getFileName(); final int year = Calendar.getInstance().get(Calendar.YEAR); assertTrue("Date was not substituted: " + name, name.contains(Integer.toString(year))); } }
final Layout<String> layout = createPatternLayout(); final FileAppender appender = FileAppender.newBuilder() .withFileName(FILE_NAME) .withName("test") .build(); Assert.assertEquals(createOnDemand, appender.getManager().isCreateOnDemand()); try { appender.start(); assertTrue("Appender did not start", appender.isStarted()); final boolean exists = Files.exists(PATH); final String msg = String.format("concurrent = %s, createOnDemand = %s, file exists = %s", concurrent, createOnDemand, .setTimeMillis(System.currentTimeMillis()).build(); try { appender.append(logEvent); Thread.sleep(25); // Give up control long enough for another thread/process to occasionally do appender.stop(); assertFalse("Appender did not stop", appender.isStarted());
/** * Makes a FileAppender with the most common options * * @param filename * @param layout * @param name * @return */ public static FileAppender makeFileAppender(String filename, PatternLayout layout, String name) { return FileAppender.newBuilder() .withFileName(filename) .withBufferedIo(true) .withLayout(layout) .withName(name) .build(); }
public static void addFileAppender(final String loggerPath, final File logFile, final AppConfig appConfig) { // retrieve the logger context LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false); Configuration configuration = loggerContext.getConfiguration(); // retrieve the root logger config LoggerConfig loggerConfig = configuration.getLoggerConfig(loggerPath); loggerConfig.setLevel(Level.toLevel(appConfig.getTcLogLevel())); // Define log pattern layout PatternLayout layout = PatternLayout.createLayout(DEFAULT_LOGGER_PATTERN, null, null, null, Charset.defaultCharset(), false, false, null, null); // create the appenders FileAppender fileAppender = FileAppender.createAppender(logFile.getAbsolutePath(), "true", "false", "fileAppender", "true", "true", "true", "8192", layout, null, "false", null, null); fileAppender.start(); // add the appenders loggerConfig.addAppender(fileAppender, Level.toLevel(appConfig.getTcLogLevel()), null); loggerContext.updateLoggers(); }
/** {@inheritDoc} */ @Nullable @Override public String fileName() { for (Logger log = impl; log != null; log = log.getParent()) { for (Appender a : log.getAppenders().values()) { if (a instanceof FileAppender) return ((FileAppender)a).getFileName(); if (a instanceof RollingFileAppender) return ((RollingFileAppender)a).getFileName(); if (a instanceof RoutingAppender) { try { RoutingAppender routing = (RoutingAppender)a; Field appsFiled = routing.getClass().getDeclaredField("appenders"); appsFiled.setAccessible(true); Map<String, AppenderControl> appenders = (Map<String, AppenderControl>)appsFiled.get(routing); for (AppenderControl control : appenders.values()) { Appender innerApp = control.getAppender(); if (innerApp instanceof FileAppender) return normalize(((FileAppender)innerApp).getFileName()); if (innerApp instanceof RollingFileAppender) return normalize(((RollingFileAppender)innerApp).getFileName()); } } catch (IllegalAccessException | NoSuchFieldException e) { error("Failed to get file name (was the implementation of log4j2 changed?).", e); } } } } return null; }
.build(); final FileAppender appender = FileAppender.newBuilder() .withFileName(file.getAbsolutePath()) .withName("test") appender.start(); assertTrue("Appender did not start", appender.isStarted()); Assert.assertNotEquals(createOnDemand, Files.exists(path)); long curLen = file.length(); .setTimeMillis(System.currentTimeMillis()).build(); try { appender.append(event); curLen = file.length(); assertTrue("File length: " + curLen, curLen > prevLen); appender.stop(); assertFalse("Appender did not stop", appender.isStarted());
private static void addFileAppender() throws IOException { String tempDir = System.getProperty("java.io.tmpdir"); File logFile = new File(tempDir, "meghanada_server.log"); Object ctx = LogManager.getContext(false); if (ctx instanceof LoggerContext) { try (LoggerContext context = (LoggerContext) ctx) { Configuration configuration = context.getConfiguration(); LoggerConfig loggerConfig = configuration.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); FileAppender fileAppender = FileAppender.newBuilder() .withName("file") .withLayout( PatternLayout.newBuilder() .withPattern("[%d][%-5.-5p][%-14.-14c{1}:%4L] %-22.-22M - %m%n") .build()) .withFileName(logFile.getCanonicalPath()) .build(); configuration.addAppender(fileAppender); loggerConfig.addAppender(fileAppender, Level.ERROR, null); context.updateLoggers(); } } }
/** * Get path of the log file for user to see on the WebUI. */ public static String getLogFilePath() { String logFilePath = null; org.apache.logging.log4j.Logger rootLogger = LogManager.getRootLogger(); if (rootLogger instanceof org.apache.logging.log4j.core.Logger) { org.apache.logging.log4j.core.Logger coreLogger = (org.apache.logging.log4j.core.Logger)rootLogger; for (Appender appender : coreLogger.getAppenders().values()) { if (appender instanceof FileAppender) { logFilePath = ((FileAppender) appender).getFileName(); } else if (appender instanceof RollingFileAppender) { logFilePath = ((RollingFileAppender) appender).getFileName(); } else if (appender instanceof RollingRandomAccessFileAppender) { logFilePath = ((RollingRandomAccessFileAppender) appender).getFileName(); } } } return logFilePath; }
.build(); final FileAppender appender = FileAppender.newBuilder() .withFileName(file.getAbsolutePath()) .withName("test") appender.start(); assertTrue("Appender did not start", appender.isStarted()); long curLen = file.length(); long prevLen = curLen; .setTimeMillis(System.currentTimeMillis()).build(); try { appender.append(event); curLen = file.length(); assertTrue("File length: " + curLen, curLen > prevLen); assertEquals(group, Files.readAttributes(path, PosixFileAttributes.class).group().getName()); } finally { appender.stop(); assertFalse("Appender did not stop", appender.isStarted());
final String advertiseUri, final Configuration config) { return FileAppender.<B>newBuilder() .withAdvertise(Boolean.parseBoolean(advertise)) .withAdvertiseUri(advertiseUri)
console.printInfo("Execution log at: " + ((FileAppender) appender).getFileName()); } else if (appender instanceof RollingFileAppender) { console.printInfo("Execution log at: " + ((RollingFileAppender) appender).getFileName());