java logback 自定义记录器名称

java logback custom logger name

我想创建以下 logback 配置:

<configuration>
    <appender name="INCOMING_REQUESTS_LOG" class="ch.qos.logback.core.FileAppender">
        <file>./logs/incoming_requests.log</file>
        <append>true</append>
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%date %-4relative [%thread] %-5level %logger{35} | %msg%n</pattern>
        </encoder>
    </appender>



    <logger name="mysuperduperlogger" level="DEBUG" additivity="false">
            <appender-ref ref="INCOMING_REQUESTS_LOG"/>
    </logger>
</configuration>

我可以使用

logger name="mysuperduperlogger"

作为 logback 记录器名称以及如何在我的代码中访问它?在文档中我只能找到像 "com.mypackage.myclass.aa1"

这样的记录器

当您创建 Logger 的实例时,您可以通过两种方式进行。

  1. 来自 Class
  2. 按字符串

如果你使用 Class 比如

private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);

和包含包的 class 名称是 org.example.Test 那么要为此记录器配置日志,名称可以是 org.example.Test

如果你使用 by String like

private static final Logger LOGGER = LoggerFactory.getLogger("TestLogger");

然后为此记录器配置日志,名称可以是 TestLogger

因此,如果您想使用 mysuperduperlogger 作为记录器名称,您必须创建一个 Logger 实例,如下所示。

private static final Logger LOGGER = LoggerFactory.getLogger("mysuperduperlogger");

只是为了扩展@karthikeyan-vaithilingam 的回答和@user1001 的后续问题,您可以通过简单地连接自定义记录器名称和包名称(尽管它会进入一个相当冗长的结构):

private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass().getPackageName() + ".mysuperduperlogger");

我的建议:将所有记录器名称定义到一个带有字符串常量的 class 中,将它放在一个共享的公共模块中,并从那里引用它。

为什么?:记录器名称基本上是您向应用程序管理员公开的 API,您要仔细定义此 API 并确保任何中小型代码重构(例如,重命名 class 或将 class 移动到子包)不会破坏应用程序部署位置的现有日志记录配置。