doctopus
doctopus

Reputation: 5647

Log4j2 printing to console, but not to file

I have two classes that print to two different appenders: console and file. For some reason it prints to console fine, but doesn't create and print to the file at all.

HelloWorld.java:

package com.mkyong;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class HelloWorld {

    private static final Logger logger = LogManager.getLogger(HelloWorld.class);

    public static void main(String[] args) {

        String message = "Hello there!";
        logger.debug(message);
        logger.info(message);
        logger.error(message);

        LoggerChild.log();
    }

    private static class LoggerChild {
        private static final Logger childLogger = LogManager.getLogger(LoggerChild.class);

        static void log() {
            childLogger.debug("Hi Mom!");
        }
    }
}

log4j2.xml:

<Configuration status="WARN">
    <Appenders>
        <Console name="Console_Appender" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="File_Appender" fileName="logfile2.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="com.mkyong.HelloWorld" level="error" additivity="false">
            <AppenderRef ref="File_Appender"/>
        </Logger>
        <Logger name="com.mkyong.HelloWorld.LoggerChild" level="debug" additivity="false">
            <AppenderRef ref="Console_Appender"/>
        </Logger>
        <Root level="debug">
            <AppenderRef ref="File_Appender"/>
        </Root>
    </Loggers>
</Configuration>

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mkyong</groupId>
    <artifactId>log4j2</artifactId>
    <version>1.0</version>

    <properties>
        <maven.compiler.source>1.14</maven.compiler.source>
        <maven.compiler.target>1.14</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.13.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>2.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.0</version>
        </dependency>
    </dependencies>

</project>

Upvotes: 1

Views: 2558

Answers (2)

doctopus
doctopus

Reputation: 5647

It turns out the log files were present on disk, but intellij was not showing them in the project explorer. This could be resolved by making sure *.log files are visible in Preferences | Editor | File Types

Upvotes: 1

0gam
0gam

Reputation: 1423

The FileAppender is an OutputStreamAppender that writes to the File named in the fileName parameter.

log4j2.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="DEBUG">
        <Appenders>
            <Console name="console_appender" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
            <File name="file_appender" fileName="logs/logfile2.log">
                <PatternLayout>
                    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                </PatternLayout>
            </File>

            <!-- <File name="file_appender" fileName="logs/logfile2.log" immediateFlush="false" append="false">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </File> -->
        </Appenders>
        <Loggers>
            <!-- <Logger name="com.mkyong" level="debug" additivity="false">
                <AppenderRef ref="file_appender"/>
                <AppenderRef ref="console_appender"/>
            </Logger>
            <Logger name="org.springframework.boot" level="error" additivity="false">
                <AppenderRef ref="console_appender"/>
            </Logger> -->

            <Root level="error">
                <AppenderRef ref="file_appender"/>
                <AppenderRef ref="console_appender"/>
            </Root>
        </Loggers>
    </Configuration>

log4j/2.x/manual/appenders.html

log4j2-xml-example/

Upvotes: 0

Related Questions