【问题标题】:Java log4j not workingJava log4j 不工作
【发布时间】:2017-02-28 07:49:51
【问题描述】:

我想使用 log4j 来生成日志。 为此,我使用以下代码:

package com.idm.Test;

import org.apache.log4j.Logger;

public class log4jExample {
    static Logger log = Logger.getLogger(log4jExample.class.getName());

    public static void main(String[] args) {
        log.info("Hello this is a debug message 1");
        log.info("Hello this is a debug message 2");
        log.info("Hello this is a debug message 3");
    }
}

我的 log4j 属性文件如下:

# Define the root logger with appender file
log=G:\\logs
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}\\log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

我想在里面生成日志文件

G:\logs\log.out

但问题是当我运行它时。没有在此路径上创建日志文件。 当我已经使用 log.out 名称在该位置创建了一个文件并再次运行时,它不会向我显示该文件中的日志。

我将 log4j.properties 文件放在 com.idm.Test 包中。

【问题讨论】:

  • 请注意,您没有为记录器定义级别
  • @Asettouf 我是否必须将其定义到属性文件中?
  • @Asettouf 我的文件路径是正确的还是我必须更改它?

标签: java log4j


【解决方案1】:

您正在代码中使用 Java Util Logger

import java.util.logging.Logger;

这不是 log4j 记录器。修复您的导入并确保可以找到您的配置文件(要么放在类路径中,要么使用 log4j.configuration 系统属性指定位置 - 请参阅 here

注意:OP 已编辑问题并现在使用正确的导入...


顺便说一句,不要再使用 log4j (1) 了。它已达到其EOL 而不是Java 9 ready

改用log4j2(或其他当前的日志框架)。

【讨论】:

  • 当我使用import org.apache.log4j.Logger 时,也会出现同样的问题。这不是在路径位置上创建任何文件,如果我已经在位置上创建了一个文件,则不会在此处添加日志。
  • 查看Default Initialization Procedure 以及 log4j1 如何尝试查找配置文件。但是如果你开始使用日志记录,真的不要在 log4j1 上投入任何时间(除非你必须处理遗留代码)
  • 在控制台上显示我log4j:WARN No appenders could be found for logger (com.idm.log4jExample). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
  • 在启动过程中使用-Dlog4j.debug 启用log4j 内部日志记录并检查是否找到您的配置文件(参见Example 2 此处)。
  • 你有 Maven 项目吗?
【解决方案2】:

我对您的代码和属性做了同样的事情,并创建了日志文件。 在我的例子中,log4j.properties 位于类路径的根目录中。

即)

类/log4j.properties
classes/com/idm/Test/log4jExample

请检查 log4j.properties 的位置。

【讨论】:

  • @upuant 我必须在我的 Java 项目中放置 log4j.properties 文件吗?
  • 我应该将我的log4j.properties 文件放在src 中吗?
  • @user3441151 可能是的 - 解决你当前的问题 - 但你真正应该做的是尝试了解 log4j 如何加载配置以及在类路径根目录上有什么意味着什么。你甚至不应该将你的 log4j 配置放到你的应用程序中,而应该是“外部的”。
  • 如果您有使用 Eclipse 的 java 项目,请检查 java 构建路径。(单击您的项目并检查菜单:构建路径-配置构建路径-源选项卡-默认输出文件夹)。请将 log4j.properties 文件放在 Default output 文件夹根目录下)~
【解决方案3】:

您应该将 log4j.properties 放在资源文件夹(源/主/资源)中,我认为它会正常工作。 如果您的项目是 java 项目(不是 maven 项目),我认为您应该更改代码: 包 com.idm.Test;

导入 org.apache.log4j.Logger;

公共类 log4jExample { 静态 Logger log = Logger.getLogger(log4jExample.class.getName());

public static void main(String[] args) {
    **PropertyConfigurator.configure("yourPath/log4j.properties");**
    log.info("Hello this is a debug message 1");
    log.info("Hello this is a debug message 2");
    log.info("Hello this is a debug message 3");
}

}

【讨论】:

  • 您假设 OP 使用 Maven 项目结构 - 但这是错误的。他/她使用 Eclipse Java 项目。
  • 您不应该在代码中硬编码配置文件的位置;而是通过配置指定位置(log4j 通过log4j.configuration 系统属性提供此位置)
  • 是的,也许你是对的,因为我不知道如何使用 log4j.configuration
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多