@Test public void testUncachedThreadNameStrategyReturnsCurrentThreadName() throws Exception { final String name1 = "MODIFIED-THREADNAME1"; Thread.currentThread().setName(name1); assertEquals(name1, ThreadNameCachingStrategy.UNCACHED.getThreadName()); final String name2 = "OTHER-THREADNAME2"; Thread.currentThread().setName(name2); assertEquals(name2, ThreadNameCachingStrategy.UNCACHED.getThreadName()); }
public static ThreadNameCachingStrategy create() { final String name = PropertiesUtil.getProperties().getStringProperty("AsyncLogger.ThreadNameStrategy", CACHED.name()); try { final ThreadNameCachingStrategy result = ThreadNameCachingStrategy.valueOf(name); LOGGER.debug("AsyncLogger.ThreadNameStrategy={}", result); return result; } catch (final Exception ex) { LOGGER.debug("Using AsyncLogger.ThreadNameStrategy.CACHED: '{}' not valid: {}", name, ex.toString()); return CACHED; } } }
@Test public void testUseUncachedThreadNameIfConfigured() throws Exception { System.setProperty("AsyncLogger.ThreadNameStrategy", "UNCACHED"); final ThreadNameCachingStrategy tns = ThreadNameCachingStrategy.create(); assertSame(ThreadNameCachingStrategy.UNCACHED, tns); }
@Test public void testUseCachedThreadNameIfConfigured() throws Exception { System.setProperty("AsyncLogger.ThreadNameStrategy", "CACHED"); final ThreadNameCachingStrategy tns = ThreadNameCachingStrategy.create(); assertSame(ThreadNameCachingStrategy.CACHED, tns); }
@Test public void testCachedThreadNameStrategyReturnsCachedThreadName() throws Exception { final String original = "Original-ThreadName"; Thread.currentThread().setName(original); assertEquals(original, ThreadNameCachingStrategy.CACHED.getThreadName()); final String name2 = "OTHER-THREADNAME2"; Thread.currentThread().setName(name2); assertEquals(original, ThreadNameCachingStrategy.CACHED.getThreadName()); }
@Override public void translateTo(final RingBufferLogEvent event, final long sequence, final Object... args) { // Implementation note: candidate for optimization: exceeds 35 bytecodes. final AsyncLogger asyncLogger = (AsyncLogger) args[0]; final StackTraceElement location = (StackTraceElement) args[1]; final String fqcn = (String) args[2]; final Level level = (Level) args[3]; final Marker marker = (Marker) args[4]; final Message message = (Message) args[5]; final Throwable thrown = (Throwable) args[6]; // needs shallow copy to be fast (LOG4J2-154) final ContextStack contextStack = ThreadContext.getImmutableStack(); final Thread currentThread = Thread.currentThread(); final String threadName = THREAD_NAME_CACHING_STRATEGY.getThreadName(); event.setValues(asyncLogger, asyncLogger.getName(), marker, fqcn, level, message, thrown, // config properties are taken care of in the EventHandler thread // in the AsyncLogger#actualAsyncLog method CONTEXT_DATA_INJECTOR.injectContextData(null, (StringMap) event.getContextData()), contextStack, currentThread.getId(), threadName, currentThread.getPriority(), location, CLOCK.currentTimeMillis(), nanoClock.nanoTime()); }