当前位置: 首页 > 面试题库 >

java.util.logging Java 8中的变量

公良弘毅
2023-03-14
问题内容

我们正在使用java.util.logging

void log(Level level, Throwable thrown, Supplier<String> msgSupplier)

以及其他一些便捷方法,例如

logp(Level level, String sourceClass, String sourceMethod,
                                                String msg, Object params[])

但是没有varargs方法。怎么会?这看起来像是将来的增强功能,还是有充分的理由不提供以下内容:

    public void log( Level level, Throwable t, String msg, Object... params) {
        // throw new RuntimeException("No yet impl");
        if (!isLoggable(level)) {
            return;
        }
        LogRecord lr = new LogRecord(level, msg);
        lr.setParameters(params);
        if (t != null) {
            lr.setThrown(t);
        }
        doLog(lr);
    }

我创建了助手:

    public static void log(Logger logger, Level level, Throwable t, String msg, Object... params) {
        // throw new RuntimeException("No yet impl");
        if (!logger.isLoggable(level)) {
            return;
        }
        LogRecord lr = new LogRecord(level, msg);
        lr.setParameters(params);
        if (t != null) {
            lr.setThrown(t);
        }
        logger.log(lr);
    }

很想打电话给doLog而不是在最后一行登录,但是doLog是一个私人帮手!不知道为什么,因为我没有办法设置捆绑包等-希望它是

public void doLog(LogRecord lr)而不是private。

无论如何,对于我们来说,以下方法可以做同样的事情,以便我们可以使用自己的varargs方法?

// resource bundle and then call "void log(LogRecord)".
private void doLog(LogRecord lr) {
    lr.setLoggerName(name);
    final LoggerBundle lb = getEffectiveLoggerBundle();
    final ResourceBundle  bundle = lb.userBundle;
    final String ebname = lb.resourceBundleName;
    if (ebname != null && bundle != null) {
        lr.setResourceBundleName(ebname);
        lr.setResourceBundle(bundle);
    }
    log(lr);
}

问题答案:

但是没有varargs方法。怎么会?这看起来像是未来的增强功能吗?

多年来,OpenJDK网站上的java.util.logging.Logger中有多次使用Use
argargs的
请求。JDK
5之后
并没有真正维护该API
。日志记录已在JDK
8中针对Lambda表达式进行了更新,但日志记录指南并未针对最佳实践进行更新,只是java.util.logging.Logger中的几个示例。

我创建了助手 public static void log(Logger logger, Level level, Throwable t, String msg, Object... params)

您可能要使用如何使用抛出的参数记录日志中的版本[?](http://codingdict.com/questions/159495因为它将保留正确的类和方法名称,因为调用者仍然负责发布日志记录。

有什么充分的理由不要有这样的东西吗 log(Level level, Throwable t, String msg, Object... params)

这可能是安全的补充。Oracle进行了一项调查,很显然,他们希望您将lambda或方法引用与采用a
Supplier<String>并依赖于提供var-
args支持的java.util.Formatter的一种日志方法一起使用。

} catch (IllegalArgumentException iae) {
    logger.log(Level.SEVERE, iae, () -> String.format("%1$s is too many.", count)); 
}


 类似资料:
  • 问题内容: 因此,我正在阅读《 实践 中的 Java并发性》 这本书,而我只能停留在这一解释上,没有一个例子,我似乎无法理解。这是报价: 当线程将数据写入易失性变量,然后线程 读取同一变量时,在写入易失性变量之前可见的所有变量的值 将在读取易失性变量后变为可见。 有人可以给我一个反例的原因,为什么“在写入易失性变量之前可见的所有变量的值在读取易失性变量之后就变得可见”? 我很困惑,为什么在读取易失

  • 问题内容: 我知道在PHP中可能有“变量”变量。例如 是否可以在JavaScript中将变量的名称引用为字符串?怎么做? 问题答案: 对此没有单一的解决方案(当然,有,但是请不要认真考虑)。可以通过来动态访问 一些 全局变量,但这不适用于函数本地的变量。 不会 成为属性的全局变量是使用和和定义的变量。 几乎总是比使用可变变量更好的解决方案! 相反,您应该查看数据结构并为您的问题选择正确的结构]。

  • 用户可以在Playbook中,通过vars关键字自定义变量,使用时用{{ }}引用以来即可。 Playbook中定义和使用的变量的方法 例如下面的例子中,用户定义变量名为http_port,其值为为80。在tasks firewalld中,通过{{ http_port }}引用。 --- - hosts: web vars: http_port: 80 remote_user: r

  • 本文向大家介绍Ruby中的变量,包括了Ruby中的变量的使用技巧和注意事项,需要的朋友参考一下 Ruby变量 Ruby支持以下类型的变量: 实例变量 类变量 局部变量 全局变量 1)实例变量 一个实例变量总是开头@。如果您不初始化实例变量,那么它将在编译时从编译器获取nil值。它们的值对于对象的某些实例是有限的或局部的。存在一个实例变量的多个副本,并且同一类的每个对象都可以访问其实例变量的本地副本

  • 1、变量的创建和赋值 在 Python 程序中,变量是用一个变量名表示,可以是任意数据类型,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头,比如: a=88 这里的 a 就是一个变量,代表一个整数,注意一点是 Python 是不用声明数据类型的。在 Python 中 = 是赋值语句,跟其他的编程语言也是一样的,因为 Python 定义变量时不需要声明数据类型,因此可以把任意的

  • 在制定时间表时,你必须遵守法律(硬性要求),该法律规定,作为一名员工,你每七天只能工作一定的时间。它没有说日历周的原因是在创建时间表时为雇主提供一些回旋空间(通常是提前4-16周)。一旦设置了此计划期的开始日期,在您想要进行完整的重新规划之前,该日期无法更改,但您需要通知员工。所以它可以被视为一个变量,直到你接受了时间表,然后它就变成了一个常数。当然,这是每个员工的个人情况。该开始日期将由您的第一

  • 问题内容: 用作所有其他页面的基本模板。有导航栏,在导航栏中,我想显示用户收到的消息数。因此,我需要有一个变量一样的。 但是,应如何将此变量传递给它?每个模板都会扩展并由一个函数呈现。我认为返回所有函数不是一个好方法。有更好的方法来实现这一点吗?如何将此变量传递给所有模板? 问题答案: 看看: https //docs.djangoproject.com/en/dev/ref/templates/

  • 您好,我的请求sql中需要发送变量。用于在我的数据库中搜索值 我的问题是语法错误。 谢谢你帮助我。 意外令牌 '%' ?[90mwrapSafe(内部/模块/cjs/loader.js:979: 16)?[39m?[90m模块_compile(内部/模块/cjs/loader.js:1027: 27)?[39m?[90m对象。模块。_extensions... js(内部/模块/cjs/loade