需要了解log4j appender的工作原理

时间:2014-12-21 14:54:38

标签: java log4j

我有一个简单的log4j HelloWorld程序..

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

public class HelloWorldLog4J {

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

    public static void main(String[] args) {
        System.out.println("pre_loggerDOTinfo");
        logger.info("Hello, World!mmm");
        System.out.println("post_loggerDOTinfo");
    }
}

这是我的属性文件,我将其放在同一目录中:

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\Users\adel\Desktop\Misc_Stuff\Java_Code\logging.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

但由于某种原因,我找不到在同一目录中创建的日志文件。我在想,在运行程序之后,它会创建文件logging.log

1 个答案:

答案 0 :(得分:2)

反斜杠是属性文件中的转义字符,因此如果要指定文件名

C:\Users\adel\Desktop\Misc_Stuff\Java_Code\logging.log

然后你需要加倍反斜杠:

C:\\Users\\adel\\Desktop\\Misc_Stuff\\Java_Code\\logging.log

或者,使用向前而不是向后斜杠(C:/Users/...),因为窗口可以应对。属性解析器通过静默忽略反斜杠来响应无法识别的转义序列,因此它会将原始值视为

C:UsersadelDesktopMisc_StuffJava_Codelogging.log

当您启动Java进程时,您可能会发现它在C:驱动器上的当前目录中创建了一个具有该非常长名称的文件。