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);
    }
}

我的 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。

原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

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

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

原文由 Isaac 发布,翻译遵循 CC BY-SA 3.0 许可协议

我和你有同样的问题。文件已创建,但仅在控制台中没有任何日志。在我的案例中,这是因为 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>

是的,它在我需要的地方为我创建了文件,但日志在控制台中。然后我将它更改为另一个依赖项,例如:

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

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

原文由 invzbl3 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题