首页 > 解决方案 > 如何使日志仅在文件上打印而不在控制台上打印?

问题描述

虽然我已经将处理程序配置为将日志写入文件结构,但是当我运行程序时我会在控制台栏上获取日志,我该如何伪装日志以便它只会写入文件而不暴露给控制台。

static {
    System.setProperty("java.util.logging.config.file",
            "log.properties");
    //must initialize loggers after setting above property
}
static Logger logger = Logger.getLogger("com.debugz");
public static void main(String[] args) {
try  {
        FileHandler h = new FileHandler("%h/file_%g.log",1,4);
        h.setFormatter(new SimpleFormatter());
        logger.addHandler(h);
        logger.log(Level.INFO,"Hello");

    }
    catch (Exception error){
        System.out.println("Error : "+error.getMessage());
    }
}

标签: java

解决方案


你可以试试logger.setUseParentHandlers(false);

无效 java.util.logging.Logger.setUseParentHandlers(布尔 useParentHandlers)

指定此记录器是否应将其输出发送到其父记录器。这意味着任何 LogRecords 也将被写入父级的处理程序,并可能写入其父级,递归地向上命名空间。

参数:useParentHandlers 如果要将输出发送到记录器的父级,则为 true。

如果 ConsoleHandler 已明确添加到记录器,则上述内容不适用于您的用例,例如logger.addHandler(new ConsoleHandler());在这种情况下,您可以根据需要通过以下方式删除该处理程序logger.removeHandler(<handlerToBeRemoved>)

希望有帮助!干杯


推荐阅读