Reputation: 5647
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
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
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
Upvotes: 0