java - 在 Java 中登录

标签 java logging java.util.logging

我正在通过执行以下代码在 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 和文件
  2. 既不是 System.err 也不是文件
  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");
        }
    }

感谢帮助

最佳答案

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

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

请注意,在启动时已经配置了一个默认的处理程序。您可能需要以编程方式删除该处理程序,或将其调整为不处理任何内容,具体取决于您希望实现的日志处理程序“处理”技术。

关于java - 在 Java 中登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392604/

相关文章:

java - eclipse中无法解析导入

java - 使用 AsyncTask 进行多项操作

java - 如何在不更改应用程序语言的情况下将时间格式从英语更改为孟加拉语?

python - 当我使用 Python 的 logging.handlers.SysLogHandler 时,Syslog 消息显示为 "Unknown"

android - : java. lang.NoSuchMethodError : okhttp3. internal.Platform.log 导致 Retrofit2 登录出错

java - DailyRollingFileHandler ---- 文件应每天轮换

java - 如何在 Tomcat 中禁用 java.util.logging?

java - 想要为类(dao)中的字段创建 View 绑定(bind)器。该字段将 json 作为文本

java - 从两个不同的类登录 xml 的正确方法是什么?现在我在生成的 xml 中遇到错误

android - 在没有 USB 或 root 的情况下调试 Android 应用程序