@Override public void accept(final String key, final Object value, final StringMap contextData) { contextData.putValue(key, value); } };
@Override public void putAll(final Map<String, String> values) { if (values == null || values.isEmpty()) { return; } final StringMap map = getThreadLocalMap(); for (final Map.Entry<String, String> entry : values.entrySet()) { map.putValue(entry.getKey(), entry.getValue()); } }
@Override public void put(final String key, final String value) { getThreadLocalMap().putValue(key, value); }
@Override public <V> void putAllValues(final Map<String, V> values) { if (values == null || values.isEmpty()) { return; } final StringMap map = getThreadLocalMap(); for (final Map.Entry<String, V> entry : values.entrySet()) { map.putValue(entry.getKey(), entry.getValue()); } }
@Override public void putValue(final String key, final Object value) { getThreadLocalMap().putValue(key, value); }
@Override public void putAll(final Map<String, String> values) { if (values == null || values.isEmpty()) { return; } StringMap map = localMap.get(); map = map == null ? createStringMap() : createStringMap(map); for (final Map.Entry<String, String> entry : values.entrySet()) { map.putValue(entry.getKey(), entry.getValue()); } map.freeze(); localMap.set(map); }
@Override public <V> void putAllValues(final Map<String, V> values) { if (values == null || values.isEmpty()) { return; } StringMap map = localMap.get(); map = map == null ? createStringMap() : createStringMap(map); for (final Map.Entry<String, V> entry : values.entrySet()) { map.putValue(entry.getKey(), entry.getValue()); } map.freeze(); localMap.set(map); }
@Override public void putValue(final String key, final Object value) { StringMap map = localMap.get(); map = map == null ? createStringMap() : createStringMap(map); map.putValue(key, value); map.freeze(); localMap.set(map); }
@Test public void testDeeplyNestedPattern() { final List<PatternFormatter> formatters = parser.parse(deeplyNestedPattern); assertNotNull(formatters); assertEquals(1, formatters.size()); final StringMap mdc = ContextDataFactory.createContextData(); mdc.putValue("var", "1234"); final Log4jLogEvent event = Log4jLogEvent.newBuilder() // .setContextData(mdc).build(); final StringBuilder buf = new StringBuilder(); formatters.get(0).format(event, buf); final String expected = " 123 "; assertEquals(expected, buf.toString()); }
/** * Test the custom pattern */ @Test public void testCustomPattern() { final List<PatternFormatter> formatters = parser.parse(customPattern); assertNotNull(formatters); final StringMap mdc = ContextDataFactory.createContextData(); mdc.putValue("loginId", "Fred"); final Throwable t = new Throwable(); final StackTraceElement[] elements = t.getStackTrace(); final Log4jLogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("org.apache.logging.log4j.PatternParserTest") // .setMarker(MarkerManager.getMarker("TEST")) // .setLoggerFqcn(Logger.class.getName()) // .setLevel(Level.INFO) // .setMessage(new SimpleMessage("Hello, world")) // .setContextData(mdc) // .setThreadName("Thread1") // .setSource(elements[0]) .setTimeMillis(System.currentTimeMillis()).build(); final StringBuilder buf = new StringBuilder(); for (final PatternFormatter formatter : formatters) { formatter.format(event, buf); } final String str = buf.toString(); final String expected = "INFO [PatternParserTest :104 ] - Hello, world" + Strings.LINE_SEPARATOR; assertTrue("Expected to end with: " + expected + ". Actual: " + str, str.endsWith(expected)); }
final ThrowableProxy throwableProxy = new ThrowableProxy(ioException); final StringMap contextData = ContextDataFactory.createContextData(); contextData.putValue("MDC.A", "A_Value"); contextData.putValue("MDC.B", "B_Value"); final DefaultThreadContextStack contextStack = new DefaultThreadContextStack(true); contextStack.clear();
@Test public void testMementoReuse() { final RingBufferLogEvent evt = new RingBufferLogEvent(); // Initialize the event with parameters evt.swapParameters(new Object[10]); final String loggerName = "logger.name"; final Marker marker = MarkerManager.getMarker("marked man"); final String fqcn = "f.q.c.n"; final Level level = Level.TRACE; ReusableMessageFactory factory = new ReusableMessageFactory(); Message message = factory.newMessage("Hello {}!", "World"); try { final Throwable t = new InternalError("not a real error"); final ContextStack contextStack = new MutableThreadContextStack(Arrays.asList("a", "b")); final String threadName = "main"; final StackTraceElement location = null; evt.setValues(null, loggerName, marker, fqcn, level, message, t, (StringMap) evt.getContextData(), contextStack, -1, threadName, -1, location, new FixedPreciseClock(12345, 678), new DummyNanoClock(1)); ((StringMap) evt.getContextData()).putValue("key", "value"); final Message memento1 = evt.memento(); final Message memento2 = evt.memento(); assertThat(memento1, sameInstance(memento2)); } finally { ReusableMessageFactory.release(message); } }
contextStack, -1, threadName, -1, location, new FixedPreciseClock(12345, 678), new DummyNanoClock(1)); ((StringMap) evt.getContextData()).putValue("key", "value");
@Test public void testCreateMementoRetainsParametersAndFormat() { final RingBufferLogEvent evt = new RingBufferLogEvent(); // Initialize the event with parameters evt.swapParameters(new Object[10]); final String loggerName = "logger.name"; final Marker marker = MarkerManager.getMarker("marked man"); final String fqcn = "f.q.c.n"; final Level level = Level.TRACE; ReusableMessageFactory factory = new ReusableMessageFactory(); Message message = factory.newMessage("Hello {}!", "World"); try { final Throwable t = new InternalError("not a real error"); final ContextStack contextStack = new MutableThreadContextStack(Arrays.asList("a", "b")); final String threadName = "main"; final StackTraceElement location = null; evt.setValues(null, loggerName, marker, fqcn, level, message, t, (StringMap) evt.getContextData(), contextStack, -1, threadName, -1, location, new FixedPreciseClock(12345, 678), new DummyNanoClock(1)); ((StringMap) evt.getContextData()).putValue("key", "value"); final Message actual = evt.createMemento().getMessage(); assertEquals("Hello {}!", actual.getFormat()); assertArrayEquals(new String[]{"World"}, actual.getParameters()); assertEquals("Hello World!", actual.getFormattedMessage()); } finally { ReusableMessageFactory.release(message); } }
@Test public void testBuilderCorrectlyCopiesAllEventAttributesInclContextData() { final StringMap contextData = new SortedArrayStringMap(); contextData.putValue("A", "B"); final ContextStack contextStack = ThreadContext.getImmutableStack(); final Exception exception = new Exception("test");
public void testBuilderCorrectlyCopiesAllEventAttributes() { final StringMap contextData = ContextDataFactory.createContextData(); contextData.putValue("A", "B"); final ContextStack contextStack = ThreadContext.getImmutableStack(); final Exception exception = new Exception("test");
@Test public void testBuilderCorrectlyCopiesMutableLogEvent() throws Exception { final StringMap contextData = new SortedArrayStringMap(); contextData.putValue("A", "B"); final ContextStack contextStack = ThreadContext.getImmutableStack(); final Exception exception = new Exception("test");
evt.setValues(null, loggerName, marker, fqcn, level, data, t, (StringMap) evt.getContextData(), contextStack, -1, threadName, -1, location, new FixedPreciseClock(12345, 678), new DummyNanoClock(1)); ((StringMap) evt.getContextData()).putValue("key", "value");