代码之家  ›  专栏  ›  技术社区  ›  avalon

java logback自定义记录器名称

  •  2
  • avalon  · 技术社区  · 8 年前

    我想创建以下日志备份配置:

    <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”这样的日志记录器

    2 回复  |  直到 8 年前
        1
  •  7
  •   seenukarthi    8 年前

    创建的实例时 Logger 你可以用两种方式做到这一点。

    1. 按类别
    2. 按字符串

    如果按类使用

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

    包含该包的类名为 org.example.Test 然后,要配置此记录器的日志,名称可以是 组织示例测试

    如果按字符串使用

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

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

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

    private static final Logger LOGGER = LoggerFactory.getLogger("mysuperduperlogger");
    
        2
  •  3
  •   BogdanM    4 年前

    为了进一步了解@karthikeyan vaithilingam的答案和@user1001的后续问题,只需将它们连接起来,就可以有一个自定义的记录器名称和包名称(尽管它的结构相当长):

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

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

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