关闭Apache Common Logging

Che*_*eng 32 java

我在我的独立应用程序中使用Apache Common Logging库.在网上搜索后,我尝试使用关闭日志

package javaapplication1;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 *
 * @author yccheok
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");

        log.info("You do not want to see me");
    }

    private static final Log log = LogFactory.getLog(Main.class);
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然可以看到正在打印的日志消息.我可以知道我错过了什么吗?

我可以通过推杆关闭日志

# Sample ResourceBundle properties file
org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
Run Code Online (Sandbox Code Playgroud)

在commons-logging.properties中.

但是,在我开发期间,我的Netbeans不知道从哪里获取commons-logging.properties,有时我需要在开发期间关闭日志记录.

And*_*yle 48

正如其他人所指出的那样,这种情况正在发生,因为您设置属性之前创建了Log对象.

解决这个问题的一种方法是在Main类的静态初始化程序块中设置属性- 这将在首次加载类时以及在创建静态最终日志之前运行:

public class Main {

   static {
      System.setProperty("org.apache.commons.logging.Log",
                         "org.apache.commons.logging.impl.NoOpLog");
   }

   // Rest of class as before
}
Run Code Online (Sandbox Code Playgroud)

  • 它只是工作.我很满意你的建议. (4认同)

Pet*_*aný 7

正如其他人所指出的那样,log在设置系统属性之前实例化你的实例,这太早了.

尝试传递-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog给您的JVM以确保它在正确的时间设置.


Tho*_*sen 6

一种不同的方法可能是 - 在开发时 - 使用slf4j项目来控制日志记录.

使用commonds日志记录桥替换使用sljf4记录的Apache COmmons,然后使用合适的日志记录后端.例如,slf4j简单或NOP实现对您来说是合理的.这些只是你放在类路径中的几个罐子.

http://www.slf4j.org/legacy.html#jcl-over-slf4j