Log4J创建日志文件但不写入它

Cli*_*ote 6 java logging log4j

我正在尝试配置log4j以将消息记录到文件中.现在,文件确实使用我提供的名称创建,但日志不会写入文件.我的代码:

public class Main extends Application
{
    private static Logger logger = Logger.getLogger( Main.class.getName() );
    @Override
    public void start(Stage primaryStage) throws Exception
    {
        logger.warning("test");
        logger.severe("oh noes");
    }


    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的log4j.properties文件内容:

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.log
log4j.appender.file.MaxFileSize=1024MB
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

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我在控制台中获得此输出:

Jun 23, 2014 3:19:16 AM com.foo.Main start
WARNING: test
Jun 23, 2014 3:19:16 AM com.foo.Main start
SEVERE: oh noes
Run Code Online (Sandbox Code Playgroud)

该文件log.log确实在我的主目录中创建.但它空洞.

我有什么想法我做错了吗?我正在使用log4j 1.2.17版.

Isa*_*aac 9

输出似乎是Java的标准日志记录框架(JUL)将发出的默认格式.

所以,有两种可能性(想到):

  1. 你的代码导入java.util.logging.Logger,而不是org.apache.log4j.Logger.
  2. 在类路径中存在某种类型的库,它拦截Log4J调用并将它们转换为JUL调用.

  • 您的配置设置方式(也许您在此处发布后更改了它?),Log4J只会打印"info"和"up"的消息,并将它们打印到控制台和文件中.您可以通过在`log4j.rootLogger`中将`INFO`更改为`ALL`来更改此行为.如果这不起作用,请将`-Dlog4j.debug = true`添加到您的JVM参数中 - 这将使Log4J发出关于它自身的调试消息(到System.out),这样您就可以看到正在发生的事情. (3认同)