为什么我不能写入文件?

Why is it not possible for me to write into a file?

我正在使用 log4j2 将消息记录到控制台和一个文本文件。我可以将内容记录到控制台,但我无法写入文本文件(文本文件为空) 这是代码

package de.code.logwizard;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.Configurator;

public class Log4JarLogger 
{
    public static Logger getLogger(Class<?> clazz) 
    {
        return LogManager.getLogger(clazz);
    }

    public static void configure()
    {
        final String propertyFileName = System.getProperty("user.dir") + LOG4J_FILE;
        System.out.println(propertyFileName);
        Configurator.initialize(null, propertyFileName);
        LogManager.getLogger(Log4JarLogger.class).info("Logging initialized from file '" + propertyFileName + "'.");
    }

    private static final String LOG4J_FILE = "\log4j2Test.properties";
}

--

import de.code.logwizard.Log4JarLogger;

public class TestLogger 
{
    public static void main(String[] args) 
    {
        Log4JarLogger.configure();
        _logger = Log4JarLogger.getLogger(TestLogger.class);
        _logger.debug("This is DEBUG");
        _logger.info("This is INFO");
        _logger.warn("This is WARN");
        _logger.error("This is ERROR");
        _logger.fatal("This is FATAL");
    }

    private static org.apache.logging.log4j.Logger _logger;
}

和属性文件:

property.filename = logs
appenders = console, file

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName = target/rolling/rollingtest.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

loggers = file
logger.file.name = com.testcase 
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE

rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT

我猜那行 Configurator.initialize(null, propertyFileName);不成功的原因是什么?

log4j 记录器配置有问题。如果您想同时登录文件和控制台,请尝试更改您的记录器配置,如 -

loggers = file
# mention your root package name of the project in below key
logger.file.name = de.code.logwizard
logger.file.level = debug
logger.file.additivity = debug
logger.file.appenderRef.file.ref = LOGFILE
logger.file.appenderRef.console.ref = STDOUT

rootLogger.level = debug
rootLogger.additivity = false
rootLogger.appenderRef.rolling.ref = LOGFILE
rootLogger.appenderRef.console.ref = STDOUT

解决配置文件中的问题 -

  1. logger.file.name 值应该是项目的根包名。但是,在您的配置文件中,它是 com.testcase

  2. appender 引用声明的语法错误。应该是 appenderRef 而不是 appenderRefs