Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4J创建日志文件,但不写入日志文件_Java_Logging_Log4j - Fatal编程技术网

Java Log4J创建日志文件,但不写入日志文件

Java Log4J创建日志文件,但不写入日志文件,java,logging,log4j,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

我正在尝试配置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);
    }
}
我的
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
运行此命令时,我在控制台中得到以下输出:

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
文件
log.log
确实是在我的主目录中创建的。但它是空的


知道我做错了什么吗?我使用的是log4j版本1.2.17。

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

因此,有两种可能性(我想到):

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

  • 我也有同样的问题,我解决了。 当我在属性文件中将级别窗体信息更改为调试时-行:

    log4j.rootLogger=DEBUG, file, stdout
    
    然后我用脚本写下:

    logger.debug(“Hello world”)


    所有内容都保存在文件中。

    我和你有同样的问题。文件已创建,但仅在控制台中没有任何日志。在我的例子中,这是因为maven项目中不正确的依赖关系

    我的
    log4j.properties
    文件是:

    # Root logger option
    log4j.rootLogger=DEBUG, file
    
    # Direct log messages to a log file
    # configuration to print into file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.MaxFileSize=1MB
    log4j.appender.file.MaxBackupIndex=10
    # Define the layout for file appender
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=[%t] %-5p %c %x - %m%n
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
    # Set the name of the file
    log4j.appender.file.File=C:\\log\\logging.log
    # Set the append to false, overwrite
    log4j.appender.file.Append=false
    
    我在POM中使用了:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.6.2</version>
    </dependency>
        
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    
    
    org.slf4j
    slf4j简单
    1.6.2
    log4j
    log4j
    1.2.17
    
    是的,它在我需要的地方为我创建了一个文件,但日志在控制台中。然后我将其更改为另一个依赖项,如:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
    
    
    org.slf4j
    slf4j-log4j12
    1.7.5
    

    我最终把它放在了文件中而不是控制台中。即使没有任何明确的命令,如
    PropertyConfigurator.configure()

    您确定要导入Log4J的
    Logger
    类,而不是
    java.util.logging.Logger
    ?谢谢,就是这样。但我注意到,只有我的
    错误
    或更高级别的消息被记录到文件或控制台。有没有办法让它记录所有级别的日志?按照您的配置设置方式(可能是您在这里发布后更改了它?),Log4J将只打印
    info
    及以上的消息,并将它们打印到控制台和文件中。您可以通过在
    log4j.rootLogger
    中将
    INFO
    更改为
    ALL
    来更改此行为。如果这不起作用,请将
    -Dlog4j.debug=true
    添加到JVM参数中,这将使Log4J发出关于自身的调试消息(到System.out),以便您可以看到发生了什么。