我想在我的程序中使用日志。我听说过java.util.logging,但我不知道如何开始。
有没有关于使用日志的示例?我该如何在自己的程序中使用日志?
我想在我的程序中使用日志。我听说过java.util.logging,但我不知道如何开始。
有没有关于使用日志的示例?我该如何在自己的程序中使用日志?
java.util.logging
让你不必再带着一个jar文件跑你的应用程序,而且它可以很好地与一个好的格式化程序一起使用。
一般来说,在每个类的顶部,你应该有:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
然后,您可以直接使用Logger类的各种功能。
对于顶层执行流中的任何调试操作,请使用Level.FINE
。
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
在调试基本流程问题时,请在循环内部和可能不需要看到那么多细节的地方使用 Level.FINER
/ Level.FINEST
:LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
使用参数化版本的日志工具来避免生成大量字符串连接垃圾,这会导致GC跟不上。如上所述,Object[]
是廉价的,在堆栈分配通常很便宜。
在异常处理中,始终记录完整的异常详细信息:
try {
...something that can throw an ignorable exception
} catch( Exception ex ) {
LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
我总是在这里使用ex.toString()
作为消息,因为当我在日志文件中执行"grep -n
"查找"Exception
"时,我也可以看到消息。否则,它将出现在堆栈转储生成的输出的下一行,您必须拥有更高级的正则表达式来匹配那一行,这通常会让您获得更多不必要的输出。
.fine()
方法进行日志记录,但似乎无法显示消息... - Anubian Noobprivate final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());
有许多不同类型的日志记录示例。请查看java.util.logging包。
示例代码:
import java.util.logging.Logger;
public class Main {
private static Logger LOGGER = Logger.getLogger("InfoLogging");
public static void main(String[] args) {
LOGGER.info("Logging an INFO-level message");
}
}
不需要硬编码类名:
import java.util.logging.Logger;
public class Main {
private static final Logger LOGGER = Logger.getLogger(
Thread.currentThread().getStackTrace()[0].getClassName() );
public static void main(String[] args) {
LOGGER.info("Logging an INFO-level message");
}
}
Main.class.getSimpleName()
?这样重构工具在需要更改时可以正确更改它,而且它并不像你第二个解决方案那样笨拙。 - Pijusn