java logback自定义记录器名称

时间:2016-04-27 06:48:23

标签: java logging logback

我想创建以下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 logger名称以及如何在我的代码中访问它?在文档中我只能找到像#34; com.mypackage.myclass.aa1&#34;

这样的记录器。

2 个答案:

答案 0 :(得分:5)

当您创建Logger的实例时,您可以通过两种方式完成此操作。

  1. 按班级
  2. 按字符串
  3. 如果您按类

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

    并且包含该包的类名称为org.example.Test,然后为此记录器配置日志,名称可以是org.example.Test

    如果您按字符串使用

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

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

    因此,如果您想使用mysuperduperlogger作为记录器名称,则必须按如下方式创建Logger实例。

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

答案 1 :(得分:1)

只需在@ karthikeyan-vaithilingam的答案和随后的@ user1001问题上稍作扩展,就可以通过简单地将它们连接起来来获得自定义记录器名称和程序包名称(尽管它的结构相当冗长):

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

我的建议:将所有记录器名称定义为带有字符串常量的类,将其放置在共享的通用模块中,然后从那里引用它。

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