1.2. 获取应用日志记录器


在 Quarkus 中,获取应用程序日志记录器的最常见方法是:

1.2.1. 声明日志记录器字段

借助此类方法,您可以使用特定的 API 获取日志记录器实例,将其存储在类的静态字段中,并在此实例上调用日志记录操作。

同一流可以使用 任何受支持的日志记录 API 应用。

使用 JBoss Logging API 将日志记录器实例存储在静态字段中的示例:

package com.example;
import org.jboss.logging.Logger;

public class MyService {
    private static final Logger log = Logger.getLogger(MyService.class); 1

    public void doSomething() {
        log.info("It works!"); 2
    }
}

1
定义 logger 字段。
2
log 对象上调用所需的日志记录方法。

1.2.2. 简化的日志记录

Quarkus 通过自动将日志记录器字段添加到使用 io.quarkus.logging.Log 的类来简化日志记录。这消除了重复板代码的需求,并增强了日志记录设置便利。

使用静态方法调用的简化日志示例:

package com.example;

import io.quarkus.logging.Log; 1

class MyService { 2
    public void doSomething() {
        Log.info("Simple!"); 3
    }
}

1
io.quarkus.logging.Log 类包含与 JBoss Logging 相同的方法,但它们 是静态的
2
请注意,该类没有声明 logger 字段。这是因为在应用程序构建过程中,使用 Log API 的每个类中会自动创建 私有静态最终 org.jboss.logging.Logger 字段。调用 Log 方法的类的完全限定名称被用作日志记录器名称。在本例中,日志记录器名称将是 com.example.MyService
3
最后,在应用程序构建过程中,所有对 日志 方法的调用都会重写为常规的 JBoss Logging 调用。
警告

仅在应用程序类中使用 Log API,而不是在外部依赖项中使用。构建时没有由 Quarkus 处理的日志方法调用将抛出异常。

1.2.3. 注入配置的日志记录器

使用 @Inject 注解配置的 org.jboss.logging.Logger 日志记录器实例的注入是添加应用程序日志记录器的另一个替代方法,但仅适用于 CDI Bean。

您可以使用 @Inject Logger 日志,其中日志记录器以您注入的类命名,或 @Inject @LoggerName ("…​") Logger log,其中日志记录器将接收指定名称。注入后,您可以使用 log 对象来调用日志记录方法。

两种不同类型的日志记录器注入示例:

import org.jboss.logging.Logger;

@ApplicationScoped
class SimpleBean {

   @Inject
   Logger log; 1

   @LoggerName("foo")
   Logger fooLog; 2

   public void ping() {
     log.info("Simple!");
     fooLog.info("Goes to _foo_ logger!");
   }
}

1
声明类的 FQCN 用作日志记录器名称,例如 org.jboss.logging.Logger.getLogger (SimpleBean.class)
2
在这种情况下,名称 foo 用作日志记录器名称,例如org.jboss.logging.Logger.getLogger ("foo")
注意

日志记录器实例在内部缓存。因此,当注入日志记录器(例如,在 @RequestScoped bean 中)时,它会共享所有 bean 实例,以避免可能与日志记录器实例化相关的性能。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.