/** * When prudent is set to true, file appenders from multiple JVMs can safely write to the same file. * <p> * Only support by logback * * @param prudent * @since 0.1.8 */ public static void activePrudent(Logger logger, boolean prudent) { if (logger != null && logger.getDelegate() != null) { if (!(logger.getDelegate() instanceof ch.qos.logback.classic.Logger)) { throw new IllegalArgumentException("logger must be ch.qos.logback.classic.Logger, but it's " + logger.getDelegate().getClass()); } Iterator<Appender<ILoggingEvent>> iter = ((ch.qos.logback.classic.Logger)logger.getDelegate()) .iteratorForAppenders(); while (iter.hasNext()) { ch.qos.logback.core.Appender<ILoggingEvent> appender = iter.next(); if (appender instanceof FileAppender) { ((FileAppender)appender).setPrudent(prudent); } else { continue; } } } } }
@Override protected OutputStreamAppender<E> appender(LoggerContext context) { final FileAppender<E> appender = buildAppender(context); appender.setName("file-appender"); appender.setAppend(true); appender.setContext(context); appender.setImmediateFlush(immediateFlush); appender.setPrudent(false); return appender; }
public FileAppender<ILoggingEvent> buildFileAppender(LoggerContext context, String file) { FileAppender<ILoggingEvent> fileAppender = new FileAppender<>(); fileAppender.setFile(file); fileAppender.setContext(context); fileAppender.setPrudent(true); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(context); encoder.setPattern(primaryConfiguration.getLoggingPattern().or(baseConfiguration.getLoggingPattern()).or(JavaUtils.LOGBACK_LOGGING_PATTERN)); encoder.start(); fileAppender.setEncoder(encoder); fileAppender.start(); return fileAppender; } }
/** * When prudent is set to true, file appenders from multiple JVMs can safely write to the same file. * <p> * Only support by logback * * @param prudent * @since 0.1.8 */ public static void activePrudent(Logger logger, boolean prudent) { if (logger != null && logger.getDelegate() != null) { if (!(logger.getDelegate() instanceof ch.qos.logback.classic.Logger)) { throw new IllegalArgumentException("logger must be ch.qos.logback.classic.Logger, but it's " + logger.getDelegate().getClass()); } Iterator<Appender<ILoggingEvent>> iter = ((ch.qos.logback.classic.Logger)logger.getDelegate()) .iteratorForAppenders(); while (iter.hasNext()) { ch.qos.logback.core.Appender<ILoggingEvent> appender = iter.next(); if (appender instanceof FileAppender) { ((FileAppender)appender).setPrudent(prudent); } else { continue; } } } } }
/** * When prudent is set to true, file appenders from multiple JVMs can safely * write to the same file. * * Only support by logback * * @param prudent * @since 0.1.8 */ public static void activePrudent(Logger logger, boolean prudent) { if (logger != null && logger.getDelegate() != null) { if (!(logger.getDelegate() instanceof ch.qos.logback.classic.Logger)) { throw new IllegalArgumentException("logger must be ch.qos.logback.classic.Logger, but it's " + logger.getDelegate().getClass()); } Iterator<Appender<ILoggingEvent>> iter = ((ch.qos.logback.classic.Logger) logger.getDelegate()).iteratorForAppenders(); while (iter.hasNext()) { ch.qos.logback.core.Appender<ILoggingEvent> appender = iter.next(); if (appender instanceof FileAppender) { ((FileAppender) appender).setPrudent(prudent); } else { continue; } } } } }
/** * When prudent is set to true, file appenders from multiple JVMs can safely * write to the same file. * * Only support by logback * * @param prudent * @since 0.1.8 */ public static void activePrudent(Logger logger, boolean prudent) { if (logger != null && logger.getDelegate() != null) { if (!(logger.getDelegate() instanceof ch.qos.logback.classic.Logger)) { throw new IllegalArgumentException("logger must be ch.qos.logback.classic.Logger, but it's " + logger.getDelegate().getClass()); } Iterator<Appender<ILoggingEvent>> iter = ((ch.qos.logback.classic.Logger) logger.getDelegate()).iteratorForAppenders(); while (iter.hasNext()) { ch.qos.logback.core.Appender<ILoggingEvent> appender = iter.next(); if (appender instanceof FileAppender) { ((FileAppender) appender).setPrudent(prudent); } else { continue; } } } } }
@Override protected OutputStreamAppender<E> appender(LoggerContext context) { final FileAppender<E> appender = buildAppender(context); appender.setName("file-appender"); appender.setAppend(true); appender.setContext(context); appender.setImmediateFlush(immediateFlush); appender.setPrudent(false); return appender; }
public FileAppender<ILoggingEvent> buildFileAppender(LoggerContext context, String file) { FileAppender<ILoggingEvent> fileAppender = new FileAppender<>(); fileAppender.setFile(file); fileAppender.setContext(context); fileAppender.setPrudent(true); PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(context); encoder.setPattern(primaryConfiguration.getLoggingPattern().or(baseConfiguration.getLoggingPattern()).or(JavaUtils.LOGBACK_LOGGING_PATTERN)); encoder.start(); fileAppender.setEncoder(encoder); fileAppender.start(); return fileAppender; } }
@Test public void testPrudentModeLogicalImplications() { String filename = CoreTestConstants.OUTPUT_DIR_PREFIX + diff + "fat-testPrudentModeLogicalImplications.txt"; File file = new File(filename); FileAppender<Object> appender = new FileAppender<Object>(); appender.setEncoder(new DummyEncoder<Object>()); appender.setFile(filename); appender.setName("testPrudentModeLogicalImplications"); appender.setContext(context); appender.setAppend(false); appender.setPrudent(true); appender.start(); assertTrue(appender.isAppend()); StatusManager sm = context.getStatusManager(); //StatusPrinter.print(context); StatusChecker statusChecker = new StatusChecker(context); assertEquals(Status.WARN, statusChecker.getHighestLevel(0)); List<Status> statusList = sm.getCopyOfStatusList(); assertTrue("Expecting status list size to be 2 or larger, but was " + statusList.size(), statusList.size() >= 2); String msg1 = statusList.get(1).getMessage(); assertTrue("Got message [" + msg1 + "]", msg1 .startsWith("Setting \"Append\" property")); appender.doAppend(new Object()); appender.stop(); assertTrue(file.exists()); assertTrue("failed to delete " + file.getAbsolutePath(), file.delete()); }
@Before public void setUp() throws InterruptedException { context.getStatusManager().add(new OnConsoleStatusListener()); File outputDir = new File(outputDirStr); outputDir.mkdirs(); fa.setContext(context); fa.setName("FILE"); fa.setPrudent(true); fa.setEncoder(new EchoEncoder<Object>()); fa.setFile(logfileStr); fa.start(); }
static LoggerContext buildLoggerContext(String filename, boolean safetyMode) { LoggerContext loggerContext = new LoggerContext(); FileAppender<ILoggingEvent> fa = new FileAppender<ILoggingEvent>(); PatternLayoutEncoder patternLayout = new PatternLayoutEncoder(); patternLayout.setPattern("%5p %c - %m%n"); patternLayout.setContext(loggerContext); patternLayout.start(); fa.setEncoder(patternLayout); fa.setFile(filename); fa.setAppend(false); fa.setPrudent(safetyMode); fa.setContext(loggerContext); fa.start(); ch.qos.logback.classic.Logger root = loggerContext .getLogger(Logger.ROOT_LOGGER_NAME); root.addAppender(fa); return loggerContext; }
static LoggerContext buildLoggerContext(String stamp, String filename, boolean safetyMode) { LoggerContext loggerContext = new LoggerContext(); FileAppender<ILoggingEvent> fa = new FileAppender<ILoggingEvent>(); PatternLayoutEncoder patternLayout = new PatternLayoutEncoder(); patternLayout.setPattern(stamp + " %5p - %m%n"); patternLayout.setContext(loggerContext); patternLayout.start(); fa.setEncoder(patternLayout); fa.setFile(filename); fa.setAppend(true); fa.setPrudent(safetyMode); fa.setContext(loggerContext); fa.start(); ch.qos.logback.classic.Logger root = loggerContext .getLogger(Logger.ROOT_LOGGER_NAME); root.addAppender(fa); return loggerContext; }
appender.setLayout(formatter); appender.setFile(fileConfiguration.getCurrentLogFilename()); appender.setPrudent(false); // We don't expect multiple JVMs appender.setEncoder(encoder);