在编译时禁用Java的日志记录

Max*_*Max 6 java compiler-construction logging compile-time

我有一些Java代码,我想用日志消息进行调试以进行调试.但是,最终(已编译)的生产代码不应包含任何日志记录,因为它会减慢执行时间.Java中是否有任何方法可以在编译时禁用记录器?

我并不害怕在运行时启用/禁用记录器的日志方法中添加检查.

if (logging==enabled) {// do logging}
Run Code Online (Sandbox Code Playgroud)

但我想在生产代码中避免参数构造如下所示:

Logger.log("undefined state" + state + " @ " + new Date());
Run Code Online (Sandbox Code Playgroud)

我正在使用Sun的Java编译器.

Tho*_*sen 6

您是否考虑过使用{} -placeholders的slf4j方法.这允许延迟构造toString(),这意味着如果禁用调试日志记录,log.debug(...)便宜.

log.debug("in loop() - a={}, b={}", a, b);
Run Code Online (Sandbox Code Playgroud)


daa*_*ist 0

我不知道有关此的任何编译器功能,但您还可以做的是创建一个构建脚本。该脚本将复制原始(调试)Java 源文件,将它们复制到临时位置,从中删除日志记录语句,然后编译新的源文件,然后这些文件将不含调试代码。