我无法让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将它们合并为一个配置对象。
我的配置中有什么错过?
答案 0 :(得分:2)
Grails 3.x中使用默认logback
进行日志记录。要激活它,您的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
答案 1 :(得分:0)
您没有提到Log4j
的版本,但是,正如您所说的Grails 3.2.3,我猜它是Log4j2
。因此,我下面的建议基于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
。
我希望这种解释有助于您解决问题。