@Override public void end(InterpretationContext ic, String name) throws ActionException { ic.removeInPlayListener(this); Object o = ic.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; Map<String, String> propertyMap = ic.getCopyOfPropertyMap(); AppenderFactoryUsingJoran appenderFactory = new AppenderFactoryUsingJoran(seList, sa.getDiscriminatorKey(), propertyMap); sa.setAppenderFactory(appenderFactory); } }
Appender<ILoggingEvent> createSwiftingAppender(final String discriminationKey, final Context context) { final AppenderFactory<ILoggingEvent> appenderFactory = (subContext, discriminatingValue) -> createFileAppender( String.format("%s-%s", logFileBaseName, discriminatingValue), subContext); final SiftingAppender siftingAppender = new SiftingAppender(); siftingAppender.setContext(context); siftingAppender.setDiscriminator(getMdcBasedDiscriminator(discriminationKey)); siftingAppender.setAppenderFactory(appenderFactory); siftingAppender.start(); return siftingAppender; }
private AppenderTracker<ILoggingEvent> getAppenderTracker() { SiftingAppender ha = (SiftingAppender) root.getAppender("SIFT"); return ha.getAppenderTracker(); }
@Test public void timeoutPropertyShouldBeHonored() throws JoranException, InterruptedException { configure(SIFT_FOLDER_PREFIX + "timeout.xml"); long timeout = 30*1000; SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); LoggingEvent event = new LoggingEvent("", logger, Level.DEBUG, "timeout", null, null); event.setTimeStamp(now); sa.doAppend(event); AppenderTracker<ILoggingEvent> tracker = sa.getAppenderTracker(); assertEquals(1, tracker.getComponentCount()); now += timeout+1; tracker.removeStaleComponents(now); assertEquals(0, tracker.getComponentCount()); statusChecker.assertIsErrorFree(); }
SiftingAppender siftAppender = new SiftingAppender(); AppenderFactory<ILoggingEvent> appenderFactory = new AppenderFactory<ILoggingEvent>() { @Override public Appender<ILoggingEvent> buildAppender(Context context, String discriminatingValue) throws JoranException { /* Create your file appender here, with what ever options you need */ PatternLayoutEncoder ple = new PatternLayoutEncoder(); ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n"); ple.setContext(context); ple.start(); FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>(); fileAppender.setFile(file); fileAppender.setEncoder(ple); fileAppender.setContext(context); fileAppender.start(); return fileAppender; } }; /* set your factory to the sifting appender */ siftAppender.setAppenderFactory(appenderFactory ); siftAppender.setContext(context); siftAppender.setName("TMP"); siftAppender.start(); logger.addAppender(siftAppender); logger.setAdditive(true);
FileAppender<ILoggingEvent> tempFileAppender = (FileAppender<ILoggingEvent>) siftingAppender.getAppenderTracker() .getOrCreate("temp", 0L);
@Test public void maxAppendersCountPropertyShouldBeHonored() throws JoranException { configure(SIFT_FOLDER_PREFIX + "maxAppenderCount.xml"); int max = 5; SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); String mdcKey = "max"; for(int i = 0; i <= max; i++) { MDC.put(mdcKey, "" + (diff + i)); LoggingEvent event = new LoggingEvent("", logger, Level.DEBUG, "max"+i, null, null); event.setTimeStamp(now); sa.doAppend(event); now += AbstractComponentTracker.WAIT_BETWEEN_SUCCESSIVE_REMOVAL_ITERATIONS; } AppenderTracker<ILoggingEvent> tracker = sa.getAppenderTracker(); assertEquals(max, tracker.allKeys().size()); assertNull(tracker.find("" + (diff + 0))); for(int i = 1; i <= max; i++) { assertNotNull(tracker.find("" + (diff + i))); } }
@Override public void end(InterpretationContext ic, String name) throws ActionException { ic.removeInPlayListener(this); Object o = ic.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; Map<String, String> propertyMap = ic.getCopyOfPropertyMap(); AppenderFactoryUsingJoran appenderFactory = new AppenderFactoryUsingJoran(seList, sa .getDiscriminatorKey(), propertyMap); sa.setAppenderFactory(appenderFactory); } }
@Ignore @Test public void programmicSiftingAppender() { SiftingAppender connectorAppender = new SiftingAppender(); connectorAppender.setContext(loggerContext); connectorAppender.setName("SIFTING_APPENDER"); discriminator.setDefaultValue("DEF_KEY"); discriminator.start(); connectorAppender.setDiscriminator(discriminator); connectorAppender.setAppenderFactory(new AppenderFactory<ILoggingEvent>() { connectorAppender.start();
@Test public void defaultLayoutRule() throws JoranException { configure(SIFT_FOLDER_PREFIX + "defaultLayoutRule.xml"); logger.debug("hello"); SiftingAppender ha = (SiftingAppender) root.getAppender("SIFT"); StringListAppender<ILoggingEvent> listAppender = (StringListAppender<ILoggingEvent>) ha .getAppenderTracker().find("default"); assertNotNull(listAppender); List<String> strList = listAppender.strList; assertEquals(1, strList.size()); assertEquals("DEBUG hello", strList.get(0)); }
@Override public void end(InterpretationContext ec, String name) throws ActionException { ec.removeInPlayListener(this); Object o = ec.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; AppenderFactory appenderFactory = new AppenderFactory(seList, sa .getDiscriminatorKey()); sa.setAppenderFactory(appenderFactory); } }
@Test public void propertyDefinedWithinSiftElementShouldBeVisible() throws JoranException { String mdcKey = "propertyDefinedWithinSift"; String mdcVal = "" + diff; String msg = "propertyDefinedWithinSiftElementShouldBeVisible"; String prefix = "Y"; configure(SIFT_FOLDER_PREFIX + "propertyDefinedInSiftElement.xml"); MDC.put(mdcKey, mdcVal); logger.debug(msg); SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); StringListAppender<ILoggingEvent> listAppender = (StringListAppender<ILoggingEvent>) sa .getAppenderTracker().find(mdcVal); assertNotNull(listAppender); List<String> strList = listAppender.strList; assertEquals(1, listAppender.strList.size()); assertEquals(prefix + msg, strList.get(0)); }
@Override public void end(InterpretationContext ec, String name) throws ActionException { ec.removeInPlayListener(this); Object o = ec.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; AppenderFactory appenderFactory = new AppenderFactory(seList, sa .getDiscriminatorKey()); sa.setAppenderFactory(appenderFactory); } }
@Test public void testWholeCycle() throws JoranException { String mdcKey = "cycle"; configure(SIFT_FOLDER_PREFIX + "completeCycle.xml"); MDC.put(mdcKey, "a"); logger.debug("smoke"); long timestamp = System.currentTimeMillis(); SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); ListAppender<ILoggingEvent> listAppender = (ListAppender<ILoggingEvent>) sa.getAppenderTracker().find("a"); assertNotNull(listAppender); List<ILoggingEvent> eventList = listAppender.list; assertEquals(1, listAppender.list.size()); assertEquals("smoke", eventList.get(0).getMessage()); MDC.remove(mdcKey); logNewEventViaSiftingAppender(sa, timestamp); assertFalse(listAppender.isStarted()); assertEquals(1, sa.getAppenderTracker().allKeys().size()); assertTrue(sa.getAppenderTracker().allKeys().contains("cycleDefault")); }
@Override public void end(InterpretationContext ic, String name) throws ActionException { ic.removeInPlayListener(this); Object o = ic.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; Map<String, String> propertyMap = ic.getCopyOfPropertyMap(); AppenderFactoryUsingJoran appenderFactory = new AppenderFactoryUsingJoran(seList, sa.getDiscriminatorKey(), propertyMap); sa.setAppenderFactory(appenderFactory); } }
@Test public void localPropertiesShouldBeVisible() throws JoranException { String mdcKey = "localProperty"; String mdcVal = "" + diff; String msg = "localPropertiesShouldBeVisible"; String prefix = "Y"; configure(SIFT_FOLDER_PREFIX + "propertyPropagation.xml"); MDC.put(mdcKey, mdcVal); logger.debug(msg); SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); StringListAppender<ILoggingEvent> listAppender = (StringListAppender<ILoggingEvent>) sa .getAppenderTracker().find(mdcVal); assertNotNull(listAppender); List<String> strList = listAppender.strList; assertEquals(1, listAppender.strList.size()); assertEquals(prefix + msg, strList.get(0)); }
@Override public void end(InterpretationContext ic, String name) throws ActionException { ic.removeInPlayListener(this); Object o = ic.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; Map<String, String> propertyMap = ic.getCopyOfPropertyMap(); AppenderFactoryUsingJoran appenderFactory = new AppenderFactoryUsingJoran(seList, sa.getDiscriminatorKey(), propertyMap); sa.setAppenderFactory(appenderFactory); } }
@Test public void compositePropertyShouldCombineWithinAndWithoutSiftElement() throws JoranException { String mdcKey = "compositeProperty"; String mdcVal = "" + diff; String msg = "compositePropertyShouldCombineWithinAndWithoutSiftElement"; String prefix = "composite"; configure(SIFT_FOLDER_PREFIX + "compositeProperty.xml"); MDC.put(mdcKey, mdcVal); logger.debug(msg); SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); StringListAppender<ILoggingEvent> listAppender = (StringListAppender<ILoggingEvent>) sa .getAppenderTracker().find(mdcVal); assertNotNull(listAppender); List<String> strList = listAppender.strList; assertEquals(1, listAppender.strList.size()); assertEquals(prefix + msg, strList.get(0)); }
@Override public void end(InterpretationContext ic, String name) throws ActionException { ic.removeInPlayListener(this); Object o = ic.peekObject(); if (o instanceof SiftingAppender) { SiftingAppender sa = (SiftingAppender) o; Map<String, String> propertyMap = ic.getCopyOfPropertyMap(); AppenderFactoryUsingJoran appenderFactory = new AppenderFactoryUsingJoran(seList, sa .getDiscriminatorKey(), propertyMap); sa.setAppenderFactory(appenderFactory); } }
@Test public void fileAppenderCollision() throws JoranException, InterruptedException { loggerContext.putProperty("DIR_PREFIX", randomOutputDir); String key = "collision"; configure(SIFT_FOLDER_PREFIX + "fileAppender.xml"); SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT"); long timestamp = System.currentTimeMillis(); MDC.put(key, "A-" + diff); logNewEventViaSiftingAppender(sa, timestamp); FileAppender<ILoggingEvent> fileAppenderA = (FileAppender<ILoggingEvent>) sa.getAppenderTracker().find("A-" + diff); assertNotNull(fileAppenderA); assertTrue(fileAppenderA.isStarted()); timestamp += ComponentTracker.DEFAULT_TIMEOUT + 1; MDC.put(key, "B-" + diff); logNewEventViaSiftingAppender(sa, timestamp); assertFalse(fileAppenderA.isStarted()); MDC.put(key, "A-" + diff); timestamp += 1; logNewEventViaSiftingAppender(sa, timestamp); FileAppender<ILoggingEvent> fileAppenderA_2 = (FileAppender<ILoggingEvent>) sa.getAppenderTracker().find("A-" + diff); assertTrue(fileAppenderA_2.isStarted()); }