Log4J:isDebugEnabled() 方法的问题

发布于 2024-10-01 12:21:58 字数 847 浏览 0 评论 0原文

我正在努力使用 Log4J 和 isDebugEnabled() 方法。

当我执行时:

package org.test;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class Test {
public static Logger logger = Logger.getLogger(Test.class.getName());

public static void main(String[] args) { (new Test()).test(); }

public void test() {
    System.out.println("Logger " + logger.getName());
    System.out.println("level: " + logger.getLevel());
    logger.setLevel(Level.DEBUG);
    System.out.println("level: " + logger.getLevel());
    System.out.println("debug? " + logger.isDebugEnabled());
}
}

我得到:

Logger org.test.Test
level: null
level: DEBUG
debug? false

记录器级别显然是 DEBUG,但是 logger.isDebugEnabled() 返回 false。 您知道如何解决这个问题吗?

编辑: 我尝试过使用其他版本的 log4j 和 Level 强制转换,但它没有改变任何内容。

I am struggling with Log4J and isDebugEnabled() method.

When I execute:

package org.test;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class Test {
public static Logger logger = Logger.getLogger(Test.class.getName());

public static void main(String[] args) { (new Test()).test(); }

public void test() {
    System.out.println("Logger " + logger.getName());
    System.out.println("level: " + logger.getLevel());
    logger.setLevel(Level.DEBUG);
    System.out.println("level: " + logger.getLevel());
    System.out.println("debug? " + logger.isDebugEnabled());
}
}

I get:

Logger org.test.Test
level: null
level: DEBUG
debug? false

The logger level is obviously DEBUG, but logger.isDebugEnabled() returns false.
Do you have an idea how to fix that?

EDIT:
I have tried with other versions of log4j and with a Level cast, and it did not change anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

裂开嘴轻声笑有多痛 2024-10-08 12:21:58

我建议你停止使用static Logger ....。有一篇关于优缺点的非常好的文章,非常值得一读,特别是如果你在服务器上。

我提出的另一个建议是查看 Slf4jLogBack(如果您可以考虑替代方案)。例如,Slf4j 不需要围绕调试日志记录保护“if”语句,这反过来意味着更干净的代码。

I'd suggest you stop doing static Logger ..... there is a very good article about the pros and cons which is well worth a read, epecially if you are on a server.

Another suggest I'd make would also be to look at Slf4j or LogBack if you can consider alternatives. Slf4j for example, doesn't require guard "if" statements around debug logging which in turn means cleaner code.

岛徒 2024-10-08 12:21:58

原因似乎是与通过maven引入的依赖项发生冲突。
我测试过删除其中一些依赖项,终于成功了。
我不明白为什么,但是......它有效!

The reason seems to be a conflict with a dependency introduced through maven.
I have tested to delete some of these dependencies, and it finally worked.
I do not understand why, but... it works!

拿命拼未来 2024-10-08 12:21:58

我尝试用此代码重现它,但它对我有用:

package com.example;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class LogTest {

  public static Logger logger = Logger.getLogger(LogTest.class.getName());

  public static void main(String[] args) {
    System.out.println(logger.getLevel());
    logger.setLevel(Level.DEBUG);
    System.out.println(logger.getLevel());
    System.out.println(logger.isDebugEnabled());
  }
}

输出:

null
DEBUG
true

我已使用 log4j-1.2.15 进行此测试。


因此,也许您的 log4j 版本存在问题 - 暂时切换到 1.2.14 或 1.2.15,然后检查问题是否仍然存在。

I tried to reproduce it with this code, but it works for me:

package com.example;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class LogTest {

  public static Logger logger = Logger.getLogger(LogTest.class.getName());

  public static void main(String[] args) {
    System.out.println(logger.getLevel());
    logger.setLevel(Level.DEBUG);
    System.out.println(logger.getLevel());
    System.out.println(logger.isDebugEnabled());
  }
}

Output:

null
DEBUG
true

I've used log4j-1.2.15 for this test.


So maybe there's an issue with your version of log4j - switch to 1.2.14 or 1.2.15 for a moment and just check, if the problem is still there.

☆獨立☆ 2024-10-08 12:21:58

您应该执行以下操作(来自 JavaDoc):

logger.setLevel((Level) Level.DEBUG);

--

我在我们的示例之间看到的唯一其他区别是您有:

public static Logger logger = Logger.getLogger(Test.class.getName());

我有:

public static Logger logger = Logger.getLogger(Test.class);

99% 可能不是这样,但正如我所说,这是唯一的区别。

You should do the following (from JavaDoc):

logger.setLevel((Level) Level.DEBUG);

--

The only other difference I see between our examples is you have:

public static Logger logger = Logger.getLogger(Test.class.getName());

where I have:

public static Logger logger = Logger.getLogger(Test.class);

It's 99% probably not that, but as I said, that's the only difference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文