Search in sources :

Example 11 with TestLogger

use of org.apache.logging.log4j.test.TestLogger in project logging-log4j2 by apache.

the class LoggerTest method getLogger_Class_ParameterizedMessageFactory.

@Test
public void getLogger_Class_ParameterizedMessageFactory() {
    // The TestLogger logger was already created in an instance variable for this class.
    // The message factory is only used when the logger is created.
    final ParameterizedMessageFactory messageFactory = ParameterizedMessageFactory.INSTANCE;
    final TestLogger testLogger = (TestLogger) LogManager.getLogger(TestParameterizedMessageFactory.class, messageFactory);
    assertNotNull(testLogger);
    assertEqualMessageFactory(messageFactory, testLogger);
    testLogger.debug("{}", Integer.MAX_VALUE);
    assertEquals(1, testLogger.getEntries().size());
    assertEquals(" DEBUG " + Integer.MAX_VALUE, testLogger.getEntries().get(0));
}
Also used : TestLogger(org.apache.logging.log4j.test.TestLogger) ParameterizedMessageFactory(org.apache.logging.log4j.message.ParameterizedMessageFactory) Test(org.junit.jupiter.api.Test)

Example 12 with TestLogger

use of org.apache.logging.log4j.test.TestLogger in project logging-log4j2 by apache.

the class LoggerTest method getLogger_String_MessageFactoryMismatch.

@Test
public void getLogger_String_MessageFactoryMismatch() {
    final StringFormatterMessageFactory messageFactory = StringFormatterMessageFactory.INSTANCE;
    final TestLogger testLogger = (TestLogger) LogManager.getLogger("getLogger_String_MessageFactoryMismatch", messageFactory);
    assertNotNull(testLogger);
    assertEqualMessageFactory(messageFactory, testLogger);
    final TestLogger testLogger2 = (TestLogger) LogManager.getLogger("getLogger_String_MessageFactoryMismatch", ParameterizedMessageFactory.INSTANCE);
    assertNotNull(testLogger2);
    // TODO: How to test?
    // This test context always creates new loggers, other test context impls I tried fail other tests.
    // assertEquals(messageFactory, testLogger2.getMessageFactory());
    testLogger.debug("%,d", Integer.MAX_VALUE);
    assertEquals(1, testLogger.getEntries().size());
    assertEquals(String.format(" DEBUG %,d", Integer.MAX_VALUE), testLogger.getEntries().get(0));
}
Also used : StringFormatterMessageFactory(org.apache.logging.log4j.message.StringFormatterMessageFactory) TestLogger(org.apache.logging.log4j.test.TestLogger) Test(org.junit.jupiter.api.Test)

Example 13 with TestLogger

use of org.apache.logging.log4j.test.TestLogger in project logging-log4j2 by apache.

the class LoggerTest method getLogger_String_StringFormatterMessageFactory.

@Test
public void getLogger_String_StringFormatterMessageFactory() {
    final StringFormatterMessageFactory messageFactory = StringFormatterMessageFactory.INSTANCE;
    final TestLogger testLogger = (TestLogger) LogManager.getLogger("getLogger_String_StringFormatterMessageFactory", messageFactory);
    assertNotNull(testLogger);
    assertEqualMessageFactory(messageFactory, testLogger);
    testLogger.debug("%,d", Integer.MAX_VALUE);
    assertEquals(1, testLogger.getEntries().size());
    assertEquals(String.format(" DEBUG %,d", Integer.MAX_VALUE), testLogger.getEntries().get(0));
}
Also used : StringFormatterMessageFactory(org.apache.logging.log4j.message.StringFormatterMessageFactory) TestLogger(org.apache.logging.log4j.test.TestLogger) Test(org.junit.jupiter.api.Test)

Example 14 with TestLogger

use of org.apache.logging.log4j.test.TestLogger in project logging-log4j2 by apache.

the class GenerateCustomLoggerTest method testGenerateSource.

@Test
public void testGenerateSource() throws Exception {
    final String CLASSNAME = "org.apache.logging.log4j.core.MyCustomLogger";
    // generate custom logger source
    final List<String> values = Arrays.asList("DEFCON1=350 DEFCON2=450 DEFCON3=550".split(" "));
    final List<Generate.LevelInfo> levels = Generate.LevelInfo.parse(values, Generate.CustomLogger.class);
    final String src = Generate.generateSource(CLASSNAME, levels, Generate.Type.CUSTOM);
    final File f = new File(TEST_SOURCE);
    f.getParentFile().mkdirs();
    try (final FileOutputStream out = new FileOutputStream(f)) {
        out.write(src.getBytes(Charset.defaultCharset()));
    }
    // set up compiler
    final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    final DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
    final List<String> errors = new ArrayList<>();
    try (final StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
        final Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(Collections.singletonList(f));
        String classPath = System.getProperty("jdk.module.path");
        List<String> optionList = new ArrayList<>();
        if (Strings.isNotBlank(classPath)) {
            optionList.add("-classpath");
            optionList.add(classPath);
        }
        // compile generated source
        compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnits).call();
        // check we don't have any compilation errors
        for (final Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
            if (diagnostic.getKind() == Diagnostic.Kind.ERROR) {
                errors.add(String.format("Compile error: %s%n", diagnostic.getMessage(Locale.getDefault())));
            }
        }
    }
    assertTrue(errors.isEmpty(), errors.toString());
    // load the compiled class
    final Class<?> cls = Class.forName(CLASSNAME);
    // check that all factory methods exist and are static
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create").getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Class.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Object.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", String.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Class.class, MessageFactory.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Object.class, MessageFactory.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", String.class, MessageFactory.class).getModifiers()));
    // check that all log methods exist
    final String[] logMethods = { "defcon1", "defcon2", "defcon3" };
    for (final String name : logMethods) {
        assertDoesNotThrow(() -> {
            cls.getDeclaredMethod(name, Marker.class, Message.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, Object.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, String.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, Message.class);
            cls.getDeclaredMethod(name, Marker.class, Object.class);
            cls.getDeclaredMethod(name, Marker.class, String.class);
            cls.getDeclaredMethod(name, Message.class);
            cls.getDeclaredMethod(name, Object.class);
            cls.getDeclaredMethod(name, String.class);
            cls.getDeclaredMethod(name, Message.class, Throwable.class);
            cls.getDeclaredMethod(name, Object.class, Throwable.class);
            cls.getDeclaredMethod(name, String.class, Throwable.class);
            cls.getDeclaredMethod(name, String.class, Object[].class);
            cls.getDeclaredMethod(name, Marker.class, String.class, Object[].class);
            // 2.4 lambda support
            cls.getDeclaredMethod(name, Marker.class, MessageSupplier.class);
            cls.getDeclaredMethod(name, Marker.class, MessageSupplier.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, String.class, Supplier[].class);
            cls.getDeclaredMethod(name, Marker.class, Supplier.class);
            cls.getDeclaredMethod(name, Marker.class, Supplier.class, Throwable.class);
            cls.getDeclaredMethod(name, MessageSupplier.class);
            cls.getDeclaredMethod(name, MessageSupplier.class, Throwable.class);
            cls.getDeclaredMethod(name, String.class, Supplier[].class);
            cls.getDeclaredMethod(name, Supplier.class);
            cls.getDeclaredMethod(name, Supplier.class, Throwable.class);
        });
    }
    // now see if it actually works...
    final Method create = cls.getDeclaredMethod("create", String.class);
    final Object customLogger = create.invoke(null, "X.Y.Z");
    int n = 0;
    for (final String name : logMethods) {
        final Method method = cls.getDeclaredMethod(name, String.class);
        method.invoke(customLogger, "This is message " + n++);
    }
    final TestLogger underlying = (TestLogger) LogManager.getLogger("X.Y.Z");
    final List<String> lines = underlying.getEntries();
    for (int i = 0; i < lines.size(); i++) {
        assertEquals(" " + levels.get(i).name + " This is message " + i, lines.get(i));
    }
}
Also used : MessageFactory(org.apache.logging.log4j.message.MessageFactory) ArrayList(java.util.ArrayList) JavaCompiler(javax.tools.JavaCompiler) Method(java.lang.reflect.Method) TestLogger(org.apache.logging.log4j.test.TestLogger) JavaFileObject(javax.tools.JavaFileObject) FileOutputStream(java.io.FileOutputStream) StandardJavaFileManager(javax.tools.StandardJavaFileManager) DiagnosticCollector(javax.tools.DiagnosticCollector) JavaFileObject(javax.tools.JavaFileObject) MessageSupplier(org.apache.logging.log4j.util.MessageSupplier) Supplier(org.apache.logging.log4j.util.Supplier) File(java.io.File) Test(org.junit.jupiter.api.Test)

Example 15 with TestLogger

use of org.apache.logging.log4j.test.TestLogger in project logging-log4j2 by apache.

the class GenerateExtendedLoggerTest method testGenerateSource.

@Test
public void testGenerateSource() throws Exception {
    final String CLASSNAME = "org.apache.logging.log4j.core.MyExtendedLogger";
    // generate custom logger source
    final List<String> values = Arrays.asList("DIAG=350 NOTICE=450 VERBOSE=550".split(" "));
    final List<Generate.LevelInfo> levels = Generate.LevelInfo.parse(values, Generate.ExtendedLogger.class);
    final String src = Generate.generateSource(CLASSNAME, levels, Generate.Type.EXTEND);
    final File f = new File(TEST_SOURCE);
    f.getParentFile().mkdirs();
    try (final FileOutputStream out = new FileOutputStream(f)) {
        out.write(src.getBytes(Charset.defaultCharset()));
    }
    final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    final DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
    final List<String> errors = new ArrayList<>();
    try (final StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
        final Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(Collections.singletonList(f));
        String classPath = System.getProperty("jdk.module.path");
        List<String> optionList = new ArrayList<>();
        if (Strings.isNotBlank(classPath)) {
            optionList.add("-classpath");
            optionList.add(classPath);
        }
        // compile generated source
        compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnits).call();
        // check we don't have any compilation errors
        for (final Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
            if (diagnostic.getKind() == Diagnostic.Kind.ERROR) {
                errors.add(String.format("Compile error: %s%n", diagnostic.getMessage(Locale.getDefault())));
            }
        }
    }
    assertTrue(errors.isEmpty(), errors.toString());
    // load the compiled class
    final Class<?> cls = Class.forName(CLASSNAME);
    // check that all factory methods exist and are static
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create").getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Class.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Object.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", String.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Class.class, MessageFactory.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", Object.class, MessageFactory.class).getModifiers()));
    assertTrue(Modifier.isStatic(cls.getDeclaredMethod("create", String.class, MessageFactory.class).getModifiers()));
    // check that the extended log methods exist
    final String[] extendedMethods = { "diag", "notice", "verbose" };
    for (final String name : extendedMethods) {
        assertDoesNotThrow(() -> {
            cls.getDeclaredMethod(name, Marker.class, Message.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, Object.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, String.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, Message.class);
            cls.getDeclaredMethod(name, Marker.class, Object.class);
            cls.getDeclaredMethod(name, Marker.class, String.class);
            cls.getDeclaredMethod(name, Message.class);
            cls.getDeclaredMethod(name, Object.class);
            cls.getDeclaredMethod(name, String.class);
            cls.getDeclaredMethod(name, Message.class, Throwable.class);
            cls.getDeclaredMethod(name, Object.class, Throwable.class);
            cls.getDeclaredMethod(name, String.class, Throwable.class);
            cls.getDeclaredMethod(name, String.class, Object[].class);
            cls.getDeclaredMethod(name, Marker.class, String.class, Object[].class);
            // 2.4 lambda support
            cls.getDeclaredMethod(name, Marker.class, MessageSupplier.class);
            cls.getDeclaredMethod(name, Marker.class, MessageSupplier.class, Throwable.class);
            cls.getDeclaredMethod(name, Marker.class, String.class, Supplier[].class);
            cls.getDeclaredMethod(name, Marker.class, Supplier.class);
            cls.getDeclaredMethod(name, Marker.class, Supplier.class, Throwable.class);
            cls.getDeclaredMethod(name, MessageSupplier.class);
            cls.getDeclaredMethod(name, MessageSupplier.class, Throwable.class);
            cls.getDeclaredMethod(name, String.class, Supplier[].class);
            cls.getDeclaredMethod(name, Supplier.class);
            cls.getDeclaredMethod(name, Supplier.class, Throwable.class);
        });
    }
    // now see if it actually works...
    final Method create = cls.getDeclaredMethod("create", String.class);
    final Object extendedLogger = create.invoke(null, "X.Y.Z");
    int n = 0;
    for (final String name : extendedMethods) {
        final Method method = cls.getDeclaredMethod(name, String.class);
        method.invoke(extendedLogger, "This is message " + n++);
    }
    // This logger extends o.a.l.log4j.spi.ExtendedLogger,
    // so all the standard logging methods can be used as well
    final ExtendedLogger logger = (ExtendedLogger) extendedLogger;
    logger.trace("trace message");
    logger.debug("debug message");
    logger.info("info message");
    logger.warn("warn message");
    logger.error("error message");
    logger.fatal("fatal message");
    final TestLogger underlying = (TestLogger) LogManager.getLogger("X.Y.Z");
    final List<String> lines = underlying.getEntries();
    for (int i = 0; i < lines.size() - 6; i++) {
        assertEquals(" " + levels.get(i).name + " This is message " + i, lines.get(i));
    }
    // test that the standard logging methods still work
    int i = lines.size() - 6;
    assertEquals(" TRACE trace message", lines.get(i++));
    assertEquals(" DEBUG debug message", lines.get(i++));
    assertEquals(" INFO info message", lines.get(i++));
    assertEquals(" WARN warn message", lines.get(i++));
    assertEquals(" ERROR error message", lines.get(i++));
    assertEquals(" FATAL fatal message", lines.get(i++));
}
Also used : ArrayList(java.util.ArrayList) JavaFileObject(javax.tools.JavaFileObject) StandardJavaFileManager(javax.tools.StandardJavaFileManager) DiagnosticCollector(javax.tools.DiagnosticCollector) MessageSupplier(org.apache.logging.log4j.util.MessageSupplier) Supplier(org.apache.logging.log4j.util.Supplier) MessageFactory(org.apache.logging.log4j.message.MessageFactory) JavaCompiler(javax.tools.JavaCompiler) Method(java.lang.reflect.Method) TestLogger(org.apache.logging.log4j.test.TestLogger) ExtendedLogger(org.apache.logging.log4j.spi.ExtendedLogger) FileOutputStream(java.io.FileOutputStream) JavaFileObject(javax.tools.JavaFileObject) File(java.io.File) Test(org.junit.jupiter.api.Test)

Aggregations

TestLogger (org.apache.logging.log4j.test.TestLogger)15 Test (org.junit.jupiter.api.Test)14 StringFormatterMessageFactory (org.apache.logging.log4j.message.StringFormatterMessageFactory)4 ParameterizedMessageFactory (org.apache.logging.log4j.message.ParameterizedMessageFactory)3 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 Method (java.lang.reflect.Method)2 ArrayList (java.util.ArrayList)2 DiagnosticCollector (javax.tools.DiagnosticCollector)2 JavaCompiler (javax.tools.JavaCompiler)2 JavaFileObject (javax.tools.JavaFileObject)2 StandardJavaFileManager (javax.tools.StandardJavaFileManager)2 MessageFactory (org.apache.logging.log4j.message.MessageFactory)2 ExtendedLogger (org.apache.logging.log4j.spi.ExtendedLogger)2 MessageSupplier (org.apache.logging.log4j.util.MessageSupplier)2 Supplier (org.apache.logging.log4j.util.Supplier)2 SimpleMessageFactory (org.apache.logging.log4j.message.SimpleMessageFactory)1