/* * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.glowroot.agent.plugin.logger; import java.util.Iterator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.glowroot.agent.it.harness.AppUnderTest; import org.glowroot.agent.it.harness.Container; import org.glowroot.agent.it.harness.Containers; import org.glowroot.agent.it.harness.TransactionMarker; import org.glowroot.wire.api.model.TraceOuterClass.Trace; import static org.assertj.core.api.Assertions.assertThat; public class Log4jIT { private static final String PLUGIN_ID = "logger"; private static Container container; @BeforeClass public static void setUp() throws Exception { container = Containers.create(); } @AfterClass public static void tearDown() throws Exception { container.close(); } @After public void afterEachTest() throws Exception { container.checkAndReset(); } @Test public void testLog() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLog.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log warn: o.g.a.p.logger.Log4jIT$ShouldLog - def"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log error: o.g.a.p.logger.Log4jIT$ShouldLog - efg"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log fatal: o.g.a.p.logger.Log4jIT$ShouldLog - fgh"); assertThat(i.hasNext()).isFalse(); } @Test public void testLogWithThrowable() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLogWithThrowable.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg_"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log warn: o.g.a.p.l.Log4jIT$ShouldLogWithThrowable - def_"); assertThat(entry.getError().getMessage()).isEqualTo("456"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log error: o.g.a.p.l.Log4jIT$ShouldLogWithThrowable - efg_"); assertThat(entry.getError().getMessage()).isEqualTo("567"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log fatal: o.g.a.p.l.Log4jIT$ShouldLogWithThrowable - fgh_"); assertThat(entry.getError().getMessage()).isEqualTo("678"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); assertThat(i.hasNext()).isFalse(); } @Test public void testLogWithNullThrowable() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLogWithNullThrowable.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg_"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log warn: o.g.a.p.l.Log4jIT$ShouldLogWithNullThrowable - def_"); assertThat(entry.getError().getMessage()).isEqualTo("def_"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log error: o.g.a.p.l.Log4jIT$ShouldLogWithNullThrowable - efg_"); assertThat(entry.getError().getMessage()).isEqualTo("efg_"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log fatal: o.g.a.p.l.Log4jIT$ShouldLogWithNullThrowable - fgh_"); assertThat(entry.getError().getMessage()).isEqualTo("fgh_"); assertThat(i.hasNext()).isFalse(); } @Test public void testLogWithPriority() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLogWithPriority.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg__"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log warn: o.g.a.p.l.Log4jIT$ShouldLogWithPriority - def__"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log error: o.g.a.p.l.Log4jIT$ShouldLogWithPriority - efg__"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log fatal: o.g.a.p.l.Log4jIT$ShouldLogWithPriority - fgh__"); assertThat(i.hasNext()).isFalse(); } @Test public void testLogWithPriorityAndThrowable() throws Exception { // when Trace trace = container.execute(ShouldLogWithPriorityAndThrowable.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg___"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log warn: o.g.a.p.l.Log4jIT$ShouldLogWithPriorityAndThrowable - def___"); assertThat(entry.getError().getMessage()).isEqualTo("456_"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log error: o.g.a.p.l.Log4jIT$ShouldLogWithPriorityAndThrowable - efg___"); assertThat(entry.getError().getMessage()).isEqualTo("567_"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log fatal: o.g.a.p.l.Log4jIT$ShouldLogWithPriorityAndThrowable - fgh___"); assertThat(entry.getError().getMessage()).isEqualTo("678_"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); assertThat(i.hasNext()).isFalse(); } @Test public void testLogWithPriorityAndNullThrowable() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLogWithPriorityAndNullThrowable.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg___null"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log warn: o.g.a.p.l.Log4jIT$ShouldLogWithPriorityAndNullThrowable - def___null"); assertThat(entry.getError().getMessage()).isEqualTo("def___null"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log error: o.g.a.p.l.Log4jIT$ShouldLogWithPriorityAndNullThrowable - efg___null"); assertThat(entry.getError().getMessage()).isEqualTo("efg___null"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log fatal: o.g.a.p.l.Log4jIT$ShouldLogWithPriorityAndNullThrowable - fgh___null"); assertThat(entry.getError().getMessage()).isEqualTo("fgh___null"); assertThat(i.hasNext()).isFalse(); } @Test public void testLocalizedLog() throws Exception { // when Trace trace = container.execute(ShouldLocalizedLog.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg____"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log warn: o.g.a.p.l.Log4jIT$ShouldLocalizedLog - def____"); assertThat(entry.getError().getMessage()).isEqualTo("456__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log error: o.g.a.p.l.Log4jIT$ShouldLocalizedLog - efg____"); assertThat(entry.getError().getMessage()).isEqualTo("567__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log fatal: o.g.a.p.l.Log4jIT$ShouldLocalizedLog - fgh____"); assertThat(entry.getError().getMessage()).isEqualTo("678__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); assertThat(i.hasNext()).isFalse(); } @Test public void testLocalizedLogWithNullThrowable() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLocalizedLogWithNullThrowable.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg____null"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log warn: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithNullThrowable - def____null"); assertThat(entry.getError().getMessage()).isEqualTo("def____null"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log error: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithNullThrowable - efg____null"); assertThat(entry.getError().getMessage()).isEqualTo("efg____null"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log fatal: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithNullThrowable - fgh____null"); assertThat(entry.getError().getMessage()).isEqualTo("fgh____null"); assertThat(i.hasNext()).isFalse(); } @Test public void testLocalizedLogWithParameters() throws Exception { // when Trace trace = container.execute(ShouldLocalizedLogWithParameters.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg____"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log warn: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithParameters - def____"); assertThat(entry.getError().getMessage()).isEqualTo("456__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log error: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithParameters - efg____"); assertThat(entry.getError().getMessage()).isEqualTo("567__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log fatal: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithParameters - fgh____"); assertThat(entry.getError().getMessage()).isEqualTo("678__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); assertThat(i.hasNext()).isFalse(); } @Test public void testLocalizedLogWithEmptyParameters() throws Exception { // when Trace trace = container.execute(ShouldLocalizedLogWithEmptyParameters.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg____"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log warn: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithEmptyParameters - def____"); assertThat(entry.getError().getMessage()).isEqualTo("456__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log error: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithEmptyParameters - efg____"); assertThat(entry.getError().getMessage()).isEqualTo("567__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()).isEqualTo( "log fatal: o.g.a.p.l.Log4jIT$ShouldLocalizedLogWithEmptyParameters - fgh____"); assertThat(entry.getError().getMessage()).isEqualTo("678__"); assertThat( entry.getError().getException().getStackTraceElementList().get(0).getMethodName()) .isEqualTo("transactionMarker"); assertThat(i.hasNext()).isFalse(); } @Test public void testLocalizedLogWithParametersAndNullThrowable() throws Exception { // given container.getConfigService().setPluginProperty(PLUGIN_ID, "traceErrorOnErrorWithoutThrowable", true); // when Trace trace = container.execute(ShouldLocalizedLogWithParametersAndNullThrowable.class); // then assertThat(trace.getHeader().getError().getMessage()).isEqualTo("efg____null"); Iterator<Trace.Entry> i = trace.getEntryList().iterator(); Trace.Entry entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log warn: o.g.a.p.l.Log4jIT" + "$ShouldLocalizedLogWithParametersAndNullThrowable - def____null"); assertThat(entry.getError().getMessage()).isEqualTo("def____null"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log error: o.g.a.p.l.Log4jIT" + "$ShouldLocalizedLogWithParametersAndNullThrowable - efg____null"); assertThat(entry.getError().getMessage()).isEqualTo("efg____null"); entry = i.next(); assertThat(entry.getDepth()).isEqualTo(0); assertThat(entry.getMessage()) .isEqualTo("log fatal: o.g.a.p.l.Log4jIT" + "$ShouldLocalizedLogWithParametersAndNullThrowable - fgh____null"); assertThat(entry.getError().getMessage()).isEqualTo("fgh____null"); assertThat(i.hasNext()).isFalse(); } public static class ShouldLog implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLog.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { logger.debug("bcd"); logger.info("cde"); logger.warn("def"); logger.error("efg"); logger.fatal("fgh"); } } public static class ShouldLogWithThrowable implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLogWithThrowable.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { logger.debug("bcd_", new IllegalStateException("234")); logger.info("cde_", new IllegalStateException("345")); logger.warn("def_", new IllegalStateException("456")); logger.error("efg_", new IllegalStateException("567")); logger.fatal("fgh_", new IllegalStateException("678")); } } public static class ShouldLogWithNullThrowable implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLogWithNullThrowable.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { logger.debug("bcd_", null); logger.info("cde_", null); logger.warn("def_", null); logger.error("efg_", null); logger.fatal("fgh_", null); } } public static class ShouldLogWithPriority implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLogWithPriority.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { try { logger.log(null, "abc__"); } catch (NullPointerException e) { // re-throw if it does not originate from log4j if (!e.getStackTrace()[0].getClassName().startsWith("org.apache.log4j.")) { throw e; } } logger.log(Level.DEBUG, "bcd__"); logger.log(Level.INFO, "cde__"); logger.log(Level.WARN, "def__"); logger.log(Level.ERROR, "efg__"); logger.log(Level.FATAL, "fgh__"); } } public static class ShouldLogWithPriorityAndThrowable implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLogWithPriorityAndThrowable.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { try { logger.log(null, "abc___", new IllegalStateException("123_")); } catch (NullPointerException e) { // re-throw if it does not originate from log4j if (!e.getStackTrace()[0].getClassName().startsWith("org.apache.log4j.")) { throw e; } } logger.log(Level.DEBUG, "bcd___", new IllegalStateException("234_")); logger.log(Level.INFO, "cde___", new IllegalStateException("345_")); logger.log(Level.WARN, "def___", new IllegalStateException("456_")); logger.log(Level.ERROR, "efg___", new IllegalStateException("567_")); logger.log(Level.FATAL, "fgh___", new IllegalStateException("678_")); } } public static class ShouldLogWithPriorityAndNullThrowable implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLogWithPriorityAndNullThrowable.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { logger.log(Level.DEBUG, "bcd___null", null); logger.log(Level.INFO, "cde___null", null); logger.log(Level.WARN, "def___null", null); logger.log(Level.ERROR, "efg___null", null); logger.log(Level.FATAL, "fgh___null", null); } } public static class ShouldLocalizedLog implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLocalizedLog.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { try { logger.l7dlog(null, "abc____", new IllegalStateException("123__")); } catch (NullPointerException e) { // re-throw if it does not originate from log4j if (!e.getStackTrace()[0].getClassName().startsWith("org.apache.log4j.")) { throw e; } } logger.l7dlog(Level.DEBUG, "bcd____", new IllegalStateException("234__")); logger.l7dlog(Level.INFO, "cde____", new IllegalStateException("345__")); logger.l7dlog(Level.WARN, "def____", new IllegalStateException("456__")); logger.l7dlog(Level.ERROR, "efg____", new IllegalStateException("567__")); logger.l7dlog(Level.FATAL, "fgh____", new IllegalStateException("678__")); } } public static class ShouldLocalizedLogWithNullThrowable implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLocalizedLogWithNullThrowable.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { logger.l7dlog(Level.DEBUG, "bcd____null", null); logger.l7dlog(Level.INFO, "cde____null", null); logger.l7dlog(Level.WARN, "def____null", null); logger.l7dlog(Level.ERROR, "efg____null", null); logger.l7dlog(Level.FATAL, "fgh____null", null); } } public static class ShouldLocalizedLogWithParameters implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLocalizedLogWithParameters.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { try { logger.l7dlog(null, "abc____", new Object[] {"a", "b", "c"}, new IllegalStateException("123__")); } catch (NullPointerException e) { // re-throw if it does not originate from log4j if (!e.getStackTrace()[0].getClassName().startsWith("org.apache.log4j.")) { throw e; } } logger.l7dlog(Level.DEBUG, "bcd____", new Object[] {"b", "c", "d"}, new IllegalStateException("234__")); logger.l7dlog(Level.INFO, "cde____", new Object[] {"c", "d", "e"}, new IllegalStateException("345__")); logger.l7dlog(Level.WARN, "def____", new Object[] {"d", "e", "f"}, new IllegalStateException("456__")); logger.l7dlog(Level.ERROR, "efg____", new Object[] {"e", "f", "g"}, new IllegalStateException("567__")); logger.l7dlog(Level.FATAL, "fgh____", new Object[] {"f", "g", "h"}, new IllegalStateException("678__")); } } public static class ShouldLocalizedLogWithEmptyParameters implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLocalizedLogWithEmptyParameters.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { try { logger.l7dlog(null, "abc____", new Object[] {"a", "b", "c"}, new IllegalStateException("123__")); } catch (NullPointerException e) { // re-throw if it does not originate from log4j if (!e.getStackTrace()[0].getClassName().startsWith("org.apache.log4j.")) { throw e; } } logger.l7dlog(Level.DEBUG, "bcd____", new Object[] {}, new IllegalStateException("234__")); logger.l7dlog(Level.INFO, "cde____", new Object[] {}, new IllegalStateException("345__")); logger.l7dlog(Level.WARN, "def____", new Object[] {}, new IllegalStateException("456__")); logger.l7dlog(Level.ERROR, "efg____", new Object[] {}, new IllegalStateException("567__")); logger.l7dlog(Level.FATAL, "fgh____", new Object[] {}, new IllegalStateException("678__")); } } public static class ShouldLocalizedLogWithParametersAndNullThrowable implements AppUnderTest, TransactionMarker { private static final Logger logger = Logger.getLogger(ShouldLocalizedLogWithParametersAndNullThrowable.class); @Override public void executeApp() { transactionMarker(); } @Override public void transactionMarker() { logger.l7dlog(Level.DEBUG, "bcd____null", new Object[] {"b_", "c_", "d_"}, null); logger.l7dlog(Level.INFO, "cde____null", new Object[] {"c_", "d_", "e_"}, null); logger.l7dlog(Level.WARN, "def____null", new Object[] {"d_", "e_", "f_"}, null); logger.l7dlog(Level.ERROR, "efg____null", new Object[] {"e_", "f_", "g_"}, null); logger.l7dlog(Level.FATAL, "fgh____null", new Object[] {"f_", "g_", "h_"}, null); } } }