/** * Test abstract functions (using console implementation) and the functions * of console * */ @Test public void testAbstractAndConsole() { BaleenConsoleLoggerBuilder builder = new BaleenConsoleLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN, new MinMaxFilter(Level.INFO, Level.WARN)); LoggerContext context = new LoggerContext(); Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder(); Appender<ILoggingEvent> appender = builder.build(context, encoder); assertEquals(NAME, builder.getName()); assertTrue(appender instanceof ConsoleAppender); assertEquals(encoder, ((ConsoleAppender<ILoggingEvent>) appender).getEncoder()); assertNotNull(appender); assertEquals(NAME, appender.getName()); Filter<ILoggingEvent> filter = appender.getCopyOfAttachedFiltersList().get(0); assertTrue(filter instanceof MinMaxFilter); assertEquals(Level.INFO, ((MinMaxFilter) filter).getMin()); assertEquals(Level.WARN, ((MinMaxFilter) filter).getMax()); }
protected FileAppender<ILoggingEvent> createRollingFileAppender(Encoder<ILoggingEvent> encoder, LoggerContext context, RollingPolicyFactory rollingPolicy) { RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>(); appender.setFile(file); appender.setContext(context); appender.setEncoder(encoder); // Setup rolling policy RollingPolicy policy = rollingPolicy.createRollingPolicy(context); appender.setRollingPolicy(policy); policy.setParent(appender); // Setup triggering policy TriggeringPolicy<ILoggingEvent> triggeringPolicy = rollingPolicy.createTriggeringPolicy(context); if (triggeringPolicy != null) { appender.setTriggeringPolicy(triggeringPolicy); triggeringPolicy.start(); } policy.start(); appender.start(); return appender; }
/** * Configure file logging and stop console logging. * * @param filename * Log to this file. */ @SuppressWarnings("unchecked") static void logToFile(String filename) { Logger rootLogger = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); FileAppender<ILoggingEvent> fileappender = new FileAppender<>(); fileappender.setContext(rootLogger.getLoggerContext()); fileappender.setFile(filename); fileappender.setName("FILE"); ConsoleAppender<?> console = (ConsoleAppender<?>) rootLogger.getAppender("STDOUT"); fileappender.setEncoder((Encoder<ILoggingEvent>) console.getEncoder()); fileappender.start(); rootLogger.addAppender(fileappender); console.stop(); }
@Test public void consolePatternCanBeOverridden() throws JoranException { JoranConfigurator configurator = new JoranConfigurator(); LoggerContext context = new LoggerContext(); configurator.setContext(context); configurator.doConfigure( new File("src/test/resources/custom-console-log-pattern.xml")); Appender<ILoggingEvent> appender = context.getLogger("ROOT") .getAppender("CONSOLE"); assertThat(appender).isInstanceOf(ConsoleAppender.class); Encoder<?> encoder = ((ConsoleAppender<?>) appender).getEncoder(); assertThat(encoder).isInstanceOf(PatternLayoutEncoder.class); assertThat(((PatternLayoutEncoder) encoder).getPattern()).isEqualTo("foo"); }
public boolean setImmediateFlush(boolean enable) { FileAppender<ILoggingEvent> fileLogger = getFileLogger(); Encoder<ILoggingEvent> encoder = fileLogger.getEncoder(); if (encoder instanceof LayoutWrappingEncoder) { ((LayoutWrappingEncoder) encoder).setImmediateFlush(enable); return true; } return false; }
public boolean isImmediateFlush() { FileAppender<ILoggingEvent> fileLogger = getFileLogger(); Encoder<ILoggingEvent> encoder = fileLogger.getEncoder(); if (encoder instanceof LayoutWrappingEncoder) { return ((LayoutWrappingEncoder) encoder).isImmediateFlush(); } return false; }
@Test public void testBasic() throws IOException { Encoder<Object> encoder = new DummyEncoder<Object>(); encoder.init(baos); da.setEncoder(encoder); da.start(); da.doAppend(new Object()); assertEquals(DummyLayout.DUMMY, baos.toString()); }
public synchronized void setEncoder(final Encoder<E> encoder) { if (isStarted()) { addStatus(new ErrorStatus("Cannot configure appender named \"" + this.name + "\" after it has been started.", this)); } this.encoder = encoder; }
/** * Create an appender that will create a new log each day * * @param context * @param encoder * @return An appender that matches the set up of the logger builder */ private RollingFileAppender<ILoggingEvent> createDailyLogAppender(LoggerContext context, Encoder<ILoggingEvent> encoder){ RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>(); appender.setEncoder(encoder); appender.setFile(file); TimeBasedRollingPolicy<ILoggingEvent> rolling = new TimeBasedRollingPolicy<>(); rolling.setContext(context); rolling.setParent(appender); rolling.setFileNamePattern(getFileWithPattern("%d")); //Set the maximum number of logs, either to the user specified setting or default to 1 if (maxNumberLogs.isPresent() && maxNumberLogs.get() >= 0) { rolling.setMaxHistory(maxNumberLogs.get()); } else { rolling.setMaxHistory(1); } //Do we need to also split files by size? if (divideBasedOnSize()) { SizeAndTimeBasedFNATP<ILoggingEvent> sizeBased = new SizeAndTimeBasedFNATP<>(); sizeBased.setContext(context); sizeBased.setMaxFileSize(getMaxFileSize()); sizeBased.setTimeBasedRollingPolicy(rolling); rolling.setTimeBasedFileNamingAndTriggeringPolicy(sizeBased); } rolling.start(); if(rolling.getTimeBasedFileNamingAndTriggeringPolicy() != null){ rolling.getTimeBasedFileNamingAndTriggeringPolicy().start(); } appender.setRollingPolicy(rolling); return appender; }
/** * Create an appender that will roll over based on size * * @param context * @param encoder * @return An appender that matches the set up of the logger builder */ private RollingFileAppender<ILoggingEvent> createLogAppender(LoggerContext context, Encoder<ILoggingEvent> encoder){ RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>(); appender.setEncoder(encoder); appender.setFile(file); FixedWindowRollingPolicy rolling = new FixedWindowRollingPolicy(); rolling.setParent(appender); rolling.setContext(context); //Set the maximum number of logs, either to the user specified setting or default to 1 rolling.setMinIndex(1); if (maxNumberLogs.isPresent() && maxNumberLogs.get() >= 0) { rolling.setMaxIndex(maxNumberLogs.get()); } else { rolling.setMaxIndex(1); } rolling.setFileNamePattern(getFileWithPattern("%i")); //Configure size based rolling SizeBasedTriggeringPolicy<ILoggingEvent> trigger = new SizeBasedTriggeringPolicy<>(); trigger.setMaxFileSize(getMaxFileSize()); trigger.setContext(context); rolling.start(); trigger.start(); appender.setRollingPolicy(rolling); appender.setTriggeringPolicy(trigger); return appender; }
/** * Build a new appender for the specified context and encoder (where required). * * @param context The logger context * @param encoder The encoder to use (if that is possible for the specific appender) * @return The new appender */ @Override public final Appender<ILoggingEvent> build(LoggerContext context, Encoder<ILoggingEvent> encoder) { Appender<ILoggingEvent> appender = createAppender(context, encoder); appender.setName(name); appender.setContext(context); if (filters != null) { filters.forEach(f -> appender.addFilter(f)); } return appender; }
@Test public void test() { BaleenLogging logging = new BaleenLogging(); InMemoryLoggingBuilder builder = new InMemoryLoggingBuilder(); logging.configure(Arrays.asList(builder, new BaleenConsoleLoggerBuilder(PATTERN, new MinMaxFilter(Level.INFO, Level.ERROR)))); LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger rootLogger = context.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); int count = 0; Iterator<Appender<ILoggingEvent>> it = rootLogger.iteratorForAppenders(); while (it.hasNext()) { Appender<ILoggingEvent> appender = it.next(); if (appender instanceof OutputStreamAppender) { Encoder<ILoggingEvent> e = ((OutputStreamAppender<ILoggingEvent>) appender).getEncoder(); assertTrue(e instanceof PatternLayoutEncoder); assertEquals(PATTERN, ((PatternLayoutEncoder) e).getPattern()); } count++; } // 3 = 2 + instrumented appender assertEquals(3, count); }
@Test public void testAbstractAndConsoleMultipleFilters() { BaleenConsoleLoggerBuilder builder = new BaleenConsoleLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN, Arrays.asList(new MinMaxFilter(Level.INFO, Level.ERROR), new MinMaxFilter(Level.INFO, Level.WARN))); LoggerContext context = new LoggerContext(); Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder(); Appender<ILoggingEvent> appender = builder.build(context, encoder); assertEquals(NAME, builder.getName()); assertTrue(appender instanceof ConsoleAppender); assertEquals(encoder, ((ConsoleAppender<ILoggingEvent>) appender).getEncoder()); assertNotNull(appender); assertEquals(NAME, appender.getName()); assertEquals(2, appender.getCopyOfAttachedFiltersList().size()); Filter<ILoggingEvent> filter = appender.getCopyOfAttachedFiltersList().get(0); assertTrue(filter instanceof MinMaxFilter); assertEquals(Level.INFO, ((MinMaxFilter) filter).getMin()); assertEquals(Level.ERROR, ((MinMaxFilter) filter).getMax()); filter = appender.getCopyOfAttachedFiltersList().get(1); assertTrue(filter instanceof MinMaxFilter); assertEquals(Level.INFO, ((MinMaxFilter) filter).getMin()); assertEquals(Level.WARN, ((MinMaxFilter) filter).getMax()); // TODO: Test that both filters are being applied }
@Test public void testFileWithDailyRolling() { BaleenFileLoggerBuilder builder = new BaleenFileLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN, LOG_FILENAME, new MinMaxFilter(Level.INFO, Level.WARN), true, Optional.of(5), Optional.of(10)); LoggerContext context = new LoggerContext(); Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder(); Appender<ILoggingEvent> appender = builder.build(context, encoder); assertTrue(appender instanceof FileAppender); assertEquals(encoder, ((FileAppender<ILoggingEvent>) appender).getEncoder()); // TODO: Add tests on the (current private) methods }
@Test public void testFileWithDailyRollingWithoutSize() { BaleenFileLoggerBuilder builder = new BaleenFileLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN, LOG_FILENAME, new MinMaxFilter(Level.INFO, Level.WARN), true, Optional.empty(), Optional.of(10)); LoggerContext context = new LoggerContext(); Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder(); Appender<ILoggingEvent> appender = builder.build(context, encoder); assertTrue(appender instanceof FileAppender); assertEquals(encoder, ((FileAppender<ILoggingEvent>) appender).getEncoder()); // TODO: Add tests on the (current private) methods }
@Test public void testFileWithoutDailyRolling() { BaleenFileLoggerBuilder builder = new BaleenFileLoggerBuilder(NAME, BaleenLogging.DEFAULT_PATTERN, LOG_FILENAME, new MinMaxFilter(Level.INFO, Level.WARN), false, Optional.of(5), Optional.of(10)); LoggerContext context = new LoggerContext(); Encoder<ILoggingEvent> encoder = new PatternLayoutEncoder(); Appender<ILoggingEvent> appender = builder.build(context, encoder); assertTrue(appender instanceof FileAppender); assertEquals(encoder, ((FileAppender<ILoggingEvent>) appender).getEncoder()); // TODO: Add tests on the (current private) methods }
@Override public String getEncoding() { if (getTarget() instanceof OutputStreamAppender) { OutputStreamAppender<?> appender = (OutputStreamAppender<?>) getTarget(); Encoder<?> encoder = appender.getEncoder(); if (encoder instanceof LayoutWrappingEncoder) { LayoutWrappingEncoder<?> base = (LayoutWrappingEncoder<?>) encoder; if (base.getCharset() != null) { return base.getCharset().name(); } return null; } } return null; }
protected FileAppender<ILoggingEvent> createSingleFileAppender(Encoder<ILoggingEvent> encoder, LoggerContext context) { FileAppender<ILoggingEvent> appender = new FileAppender<>(); appender.setFile(Objects.requireNonNull(file)); appender.setContext(context); appender.setEncoder(encoder); appender.start(); return appender; }
private ConsoleAppender setupAppender(String target, LoggerContext ctx, Encoder enc) { ConsoleAppender appender = new ConsoleAppender(); appender.setTarget(target); appender.setContext(ctx); appender.setEncoder(enc); appender.start(); return appender; }
private static Encoder<ILoggingEvent> getPatternLayoutEncoder(String logPattern) { PatternLayoutEncoder patternLayoutEncoder = new PatternLayoutEncoder(); patternLayoutEncoder.setPattern(logPattern); patternLayoutEncoder.setContext(loggerContext); patternLayoutEncoder.setOutputPatternAsHeader(true); patternLayoutEncoder.start(); return patternLayoutEncoder; }
/** * Creates a new Encoder for the specified pattern * @param pattern the pattern that shall be used by the encoder * @return a new Encoder using the specified pattern */ @SuppressWarnings("rawtypes") public static Encoder getEncoder(String pattern) { PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(lc); encoder.setPattern(pattern); encoder.start(); return encoder; }
/** * Creates the file appender for the logger with a custom logging policy * (RollingFileAppender with max size of 1 MB and up to 3 backups) * @param logFile the file to log into * @return the FileAppender for the specified File and current logging * context */ @SuppressWarnings({ "rawtypes", "unchecked" }) protected static FileAppender getFileAppender(File logFile) { // init rolling file appender RollingFileAppender rfAppender = new RollingFileAppender(); rfAppender.setContext(lc); rfAppender.setFile(logFile.getAbsolutePath()); rfAppender.setAppend(true); // rolling policy: keep up to 3 rollover-files with postfix .%i.log FixedWindowRollingPolicy rollingPolicy = new FixedWindowRollingPolicy(); rollingPolicy.setContext(lc); rollingPolicy.setParent(rfAppender); rollingPolicy.setFileNamePattern(logFileName + ".%i.log"); rollingPolicy.setMinIndex(1); rollingPolicy.setMaxIndex(3); rollingPolicy.start(); // rollover after logfixe exceeds 1MB SizeBasedTriggeringPolicy triggeringPolicy = new SizeBasedTriggeringPolicy(); triggeringPolicy.setMaxFileSize(FileSize.valueOf("1mb")); triggeringPolicy.start(); // layout of the log entries Encoder encoder = getDefaultEncoder(); // apply settings and start appender rfAppender.setEncoder(encoder); rfAppender.setRollingPolicy(rollingPolicy); rfAppender.setTriggeringPolicy(triggeringPolicy); rfAppender.start(); return rfAppender; }
public Encoder<ILoggingEvent> getEncoder() { return encoder; }
public void setEncoder(Encoder<ILoggingEvent> encoder) { this.encoder = encoder; }
public Encoder<DeferredProcessingAware> getEncoder() { return encoder; }
public void setEncoder(Encoder<DeferredProcessingAware> encoder) { this.encoder = encoder; }
public Encoder<E> getEncoder() { return encoder; }
public void setEncoder(Encoder<E> encoder) { this.encoder = encoder; }
public synchronized Encoder<E> getEncoder() { return this.encoder; }
@Override protected Appender<ILoggingEvent> createAppender(LoggerContext context, Encoder<ILoggingEvent> encoder) { return appender; }
@Override protected Appender<ILoggingEvent> createAppender(LoggerContext context, Encoder<ILoggingEvent> encoder) { appender = new InMemoryAppender<ILoggingEvent>(); return appender; }
@Test public void config() throws Exception { YamlConfiguration configuration = YamlConfiguration.readFromResource(BaleenLoggingTest.class, "dummyConfig.yaml"); BaleenLogging logging = new BaleenLogging(); logging.configure(configuration); LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); Logger rootLogger = context.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); int count = 0; Iterator<Appender<ILoggingEvent>> it = rootLogger.iteratorForAppenders(); while (it.hasNext()) { Appender<ILoggingEvent> appender = it.next(); switch (count) { case 0: assertTrue(appender instanceof ConsoleAppender); break; case 1: assertTrue(appender instanceof RollingFileAppender); break; case 2: assertTrue(appender instanceof FileAppender); assertFalse(appender instanceof RollingFileAppender); break; case 3: if (appender instanceof OutputStreamAppender) { Encoder<ILoggingEvent> e = ((OutputStreamAppender<ILoggingEvent>) appender).getEncoder(); assertTrue(e instanceof PatternLayoutEncoder); assertEquals(PATTERN, ((PatternLayoutEncoder) e).getPattern()); } break; case 4: if (appender instanceof EvictingQueueAppender) { assertEquals(EvictingQueueAppender.DEFAULT_MAX_SIZE, ((EvictingQueueAppender<ILoggingEvent>) appender).getMaxSize()); } else { fail("Unknown additional appender"); } break; case 5: // Allow additional appenders for checking, otherwise throw an error if (!(appender instanceof InstrumentedAppender)) { fail("Unknown additional appender"); } break; default: fail("Too many appenders" + appender.getName()); } count++; } assertEquals(6, count); // TODO: test the instance parameters match the configuration }