【问题标题】:Will Slf4j annotation work in Grails?Slf4j 注释可以在 Grails 中工作吗?
【发布时间】:2015-01-20 00:18:45
【问题描述】:

我有一个 Groovy 库,它使用 Groovy 提供的 @Slf4j 注释进行日志记录:

@Slf4j
class SomePogo {
    // do stuff
}

如果我将这个库放到 Grails (2.4.2) 应用程序中,默认的基于 log4j 的日志系统会获取这些类中的日志语句吗?还是我需要将 log4j 记录器添加到我的所有课程中?

【问题讨论】:

    标签: grails logging groovy log4j slf4j


    【解决方案1】:

    所有 Grails 工件(控制器、域类、标记库、服务等)都自动添加了一个静态记录器字段(名为 log)。

    src/groovy 中的类还自动添加了一个名为 log 的记录器字段,但在这种情况下,记录器是非静态的。因此,唯一需要显式添加记录器的情况是,如果您想从src/groovy 类中静态 记录某些内容。在这种情况下,您需要注释类 @Slf4j(或 @Log4j),以便用静态 log 字段替换 Grails 添加的非静态记录器。

    【讨论】:

    • 所有 Groovy 类都有记录器,甚至是 src/groovy
    • @Dónal - 问题是关于作为依赖项添加到 Grails 应用程序的第 3 方 JAR。如果它的类用@Slf4j 注释,它的记录器会被Grails 拾取吗?
    • @IAmYourFaja 是的,当然。 Log4J 不知道哪些类是“你的”,哪些属于 3rd 方库,所以它对待它们都是一样的。
    • @BurtBeck 似乎添加到src/groovy 中的类的记录器是非静态的。我已经用这个信息更新了我的答案
    • 添加自己的记录器(尤其是在工件中)的另一个好处是控制记录器名称 - 我总是忘记工件的约定,更喜欢只使用完整的类名 + 包,所以我通常添加static Logger log = LoggerFactory.getLogger(this)protected final Logger log = LoggerFactory.getLogger(getClass().name) 然后我知道我所有的记录器都在 com.burtbeckwith.appname/grails.plugin.pluginname/etc 下。
    猜你喜欢
    • 2023-03-15
    • 2016-10-17
    • 2011-09-09
    • 1970-01-01
    • 2010-09-19
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多