我在我的独立应用程序中使用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)
正如其他人所指出的那样,log在设置系统属性之前实例化你的实例,这太早了.
尝试传递-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog给您的JVM以确保它在正确的时间设置.
一种不同的方法可能是 - 在开发时 - 使用slf4j项目来控制日志记录.
使用commonds日志记录桥替换使用sljf4记录的Apache COmmons,然后使用合适的日志记录后端.例如,slf4j简单或NOP实现对您来说是合理的.这些只是你放在类路径中的几个罐子.
见http://www.slf4j.org/legacy.html#jcl-over-slf4j
| 归档时间: |
|
| 查看次数: |
24381 次 |
| 最近记录: |