在grails 3中使用logback

问题描述 投票:7回答:5

Grails 3使用logback作为默认的日志记录系统。

我需要一个例子,说明如何在这种形式的grails 3中使用logback

log.info("some Info")
logging grails logback
5个回答
14
投票

您必须将logger配置的第四个参数设置为false

logger('grails.app.controllers', INFO, ['STDOUT'], false)

然后日志记录不会显示两次。

我认为那是因为root记录器也捕获了INFO


4
投票

我只是在研究这个,因为我有类似的问题。 Grails 3确实使用Logback进行日志记录配置,但AST转换仍然使用Apache Commons Logging。

https://github.com/grails/grails-core/blob/master/grails-logging/src/main/groovy/org/grails/compiler/logging/LoggingTransformer.java

然后它使用jcl-over-slf4j桥将它全部映射回Logback。

根据邮件列表http://grails.1312388.n4.nabble.com/Grails-2-1-1-Is-it-possible-to-replace-the-injected-log-object-td4638834.html,要在全局范围内替换注入的log,您必须排除日志记录依赖项并将AST Transformer替换为您自己的。

上面评论中的博客文章提到的Logback插件提供了这个:https://github.com/grails-plugins/grails-logback/blob/master/src/java/org/codehaus/groovy/grails/compiler/logging/Slf4jTransformer.java。但是,它似乎有很多冗余,因为Grails 3已经拥有Logback支持。

如果您不想通过该工作来更改日志注入,则可以通过使用@Slf4j对类进行批注来覆盖记录器,这将覆盖该类的记录器。


2
投票
import org.slf4j.Logger
import org.slf4j.LoggerFactory

static Logger log = LoggerFactory.getLogger(SomeClass.class)

这有效,但我也想知道grails 3是否可以自动注入log


1
投票

我试过这样,它工作正常。这是来自petclinic的例子。

有关qazxsw poi的更多详细信息

logback docs

0
投票

在Grails 3中也需要这个。发现mrhaki的这篇文章:

import grails.util.BuildSettings import grails.util.Environment appender('STDOUT', ConsoleAppender) { encoder(PatternLayoutEncoder) { pattern = "%level %logger - %msg%n" } } root(ERROR, ['STDOUT']) if(Environment.current == Environment.DEVELOPMENT) { def targetDir = BuildSettings.TARGET_DIR if(targetDir) { appender("FULL_STACKTRACE", FileAppender) { file = "${targetDir}/stacktrace.log" append = true encoder(PatternLayoutEncoder) { pattern = "%level %logger - %msg%n" } } logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false ) } }

我在Quartz工作上测试了这个。我在grails 3 logging中添加了以下行

logback.groovy

在quartz工作中使用测试日志:

logger("grails.app.jobs", INFO, ['STDOUT'])

在控制台中显示日志信息

log.info "test " + new Date()

有趣的事情正在发生。我看到每个INFO grails.app.jobs.myapp.TestJob - test Tue Oct 20 10:07:31 CEST 2015 有2个重复的行

log.info

给我:

log.info "test"
log.info "test2"
System.out.println("test"3)
© www.soinside.com 2019 - 2024. All rights reserved.