3

我通过执行以下代码在java中创建一个记录器:


private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis());
private static Logger logger = Logger.getLogger("JCS_Logger");
static
{
    try
    {
        logger.addHandler(new FileHandler(logFile ));
    }
    catch (Exception e)
    {
       System.err.println("Could not return a static logger");
    }
}

如果我使用这个记录器,它不仅会写入 System.err,还会写入文件。最终我想配置记录器以允许它写入:'

  1. System.err 和 File
  2. System.err 和 File 都没有
  3. 只是 System.err
  4. 只需归档

我知道调用logger.setLevel(Level.OFF)会关闭所有日志记录,但我不确定如何为上面的列表执行此操作?是通过Level类完成的吗?任何想法或建议将不胜感激。

编辑:感谢您的回复。我用这段代码解决了它:


    /**
     * If debug should be turned on
     */
    static boolean debug = true;
    /**
     * If writing debug to file
     */
    static boolean writeLogToFile = false;
    /**
     * If writing debug to System.err
     */
    static boolean writeLogToStdErr = true;

    /**
     * Location for the temp file
     */
    private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis());
    /**
     * Instance of the logger
     */
    private static Logger logger = Logger.getLogger("JCS_Logger");
    /**
     * Handler for System.err
     */
    private static Handler consoleHandler;
    /**
     * Handler for the log file
     */
    private static Handler fileHandler;

    static
    {
        try
        {   //if not debuggin at all          
            if(debug == false)
            {
                logger.setLevel(Level.OFF);
            }
            //if not writing to the file
            if(writeLogToFile == true)
            {
                fileHandler = new FileHandler(BCApp.getLogFileHandlerPath());
                logger.addHandler(fileHandler);
            }
            //if not writing to System.err
            if(writeLogToStdErr == false)
            {
                consoleHandler = logger.getParent().getHandlers()[0];
                logger.getParent().removeHandler(consoleHandler);
            }
        }
        catch (Exception e)
        {
            System.err.println("Could not return a static logger");
        }
    }

谢谢您的帮助

4

3 回答 3

2

您可以只为想要的项目添加处理程序,在记录启动时进行选择;或者,您可以添加所有处理程序,并通过日志记录阈值调整每个处理程序。

要调整处理程序的日志记录阈值,请使用handler.setLevel(...);

请注意,在启动时已经配置了默认处理程序。您可能需要以编程方式删除该处理程序,或者根据您希望实现的日志处理程序“处理”技术对其进行调整以不处理任何内容。

于 2010-12-08T21:53:35.770 回答
1

请参阅该类的 API 文档:Logger (Java Platform SE 6)

您可以通过removeHandler(Handler)方法删除处理程序,因此如果您只想输出到控制台,例如,您可以调用此方法来删除 FileHandler。

还有其他方法。您可以采用不同的方法并为每个处理程序设置过滤器,这将丢弃不应输出的消息。也许玩弄格式化。

于 2010-12-08T21:54:22.603 回答
0

您甚至可以在不编写任何代码的情况下实现所需的配置。方法如下: 浏览到系统上安装 java 的目录。

  1. 转到 jre/lib(或 Windows 中的 jre\lib)子目录,并查找文件“logging.properties”。如果它不存在,您可以创建它。

  2. 编辑内容为“handlers =”的行到

    - 对于 System.err 和 File

    "handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler"
    

    - 对于 System.err 和 File

    Simply comment that line by adding # in the beginning of the line.
    

    -For Just System.err

    "handlers = java.util.logging.ConsoleHandler"
    

    - For Just File

    "handlers = java.util.logging.FileHandler"
    

完毕!你很高兴开始记录:)

于 2013-05-08T18:32:26.480 回答