log4j与Grails 3.2.3:我没有得到任何记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j与Grails 3.2.3:我没有得到任何记录相关的知识,希望对你有一定的参考价值。
我无法让log4j在Grails 3.2.3的项目中工作。我的目标是获取spring安全插件的详细日志,因为我遇到了一些问题并且想知道发生了什么(虽然我提供了正确的凭据但我无法登录)。
我在grails-app/conf/application.groovy
中添加了以下行:
log4j = {
all 'org.springframework'
'org.grails.plugins:spring-security-core'
debug 'grails.app'
appenders {
file name: 'file', file:'logs/logging.log'
}
root {
all 'stdout', 'file'
}
}
但是当我在交互模式下使用grails run-app
或run-app
运行应用程序时,没有创建文件,并且控制台中没有输出,即使我尝试登录并且登录失败(当然应该创建一些日志消息,特别是因为日志级别“全部”)。
我不是log4j
的专家。我之前从未使用过它。我阅读了一些教程和文档,但它们都与普通的java程序有关,而不是Grails。
我的大部分Grails配置都在YAML(application.yml
)中,只有spring和log4j
设置在一个单独的application.groovy
中。据我所知,Grails将它们合并为一个配置对象。
我的配置错过了什么?
默认情况下,logback
在Grails 3.x中用于记录。为了激活它,你必须在你的logback.groovy
中有一个grails-app/conf
。通常它看起来像:
import grails.util.BuildSettings
import grails.util.Environment
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
import ch.qos.logback.core.FileAppender
// See http://logback.qos.ch/manual/groovy.html for details on configuration
appender( 'STDOUT', ConsoleAppender ) {
encoder( PatternLayoutEncoder ){ pattern = '%d{HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n' }
}
root INFO, ['STDOUT']
logger 'org.springframework.security.web.authentication.rememberme', DEBUG
def targetDir = BuildSettings.TARGET_DIR
if( Environment.developmentMode && targetDir ){
appender( 'FULL_STACKTRACE', FileAppender ){
file = "${targetDir}/stacktrace.log"
append = true
encoder( PatternLayoutEncoder ){ pattern = '%d{HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n' }
}
logger 'StackTrace', ERROR, ['FULL_STACKTRACE'], false
}
这里Spring Sec的rememberme服务以DEBUG级别记录到stdout
你没有提到Log4j
的版本,但是,我想这是Log4j2
正如你所说的Grails 3.2.3。因此,我在下面的建议是基于Log4j2
manual。根据Log4j2手册,您必须在项目类路径中有一个配置文件。类路径可以是src/main/groovy/resources
或grails-app/conf
。配置文件可以是手册中指导的{xml|json|yaml}
。
下面是一个非常简单的配置文件内容,适用于我的项目。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Properties>
<Property name="baseDir">logs</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
<RollingFile name="RollingFile" fileName="${baseDir}/app.log"
filePattern="${baseDir}/$${date:yyyy-MM}/app-%d{yyyyMMdd}.log.gz"
filePermissions="rw-------">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
<CronTriggeringPolicy schedule="0 0 0 * * ?"/>
<DefaultRolloverStrategy stopCustomActionsOnError="true">
<PosixViewAttribute basePath="${baseDir}/$${date:yyyy-MM}" filePermissions="r--r--r--">
<IfFileName glob="*.gz" />
</PosixViewAttribute>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug" additivity="false">
<AppenderRef ref="RollingFile" />
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
此外,在这个社区有一个question我认为你可能需要以防万一。这个问题试图详细说明如何在Grails 3中配置log4j2
。
我希望这个解释有助于澄清你的问题。
以上是关于log4j与Grails 3.2.3:我没有得到任何记录的主要内容,如果未能解决你的问题,请参考以下文章
Grails 应用程序中的 Log4J 问题,它依赖于 comons-logging