Grails Log4J尝试为一个控制器登录到单独的文件只会失败
我希望在信息级别将来自grails应用程序中一个控制器的消息记录到一个特定文件中。信息或任何其他级别的所有内容都应转到另一个默认日志文件 但是,我根本无法获取Grails Log4J尝试为一个控制器登录到单独的文件只会失败,grails,logging,log4j,Grails,Logging,Log4j,我希望在信息级别将来自grails应用程序中一个控制器的消息记录到一个特定文件中。信息或任何其他级别的所有内容都应转到另一个默认日志文件 但是,我根本无法获取log4J来填充usage.log文件,尽管它很乐意记录到下面定义的“default”appender 有人能给出我的设置不起作用的任何线索吗 我的log4j设置如下: log4j = { appenders { console name: 'stdout', layout: pattern(conversionPat
log4J
来填充usage.log文件,尽管它很乐意记录到下面定义的“default”appender
有人能给出我的设置不起作用的任何线索吗
我的log4j设置如下:
log4j = {
appenders {
console name: 'stdout',
layout: pattern(conversionPattern: '%d %-5p %c{1} - %m%n')
appender new DailyRollingFileAppender(
name: 'default',
datePattern: "'.'yyyy-MM-dd",
layout: pattern(conversionPattern: '%d %-5p %c{1} - %m%n'),
file: 'C:/logs/default.log'
)
//daily usage log
appender new DailyRollingFileAppender(
name: 'usage', datePattern: "'.'yyyy-MM-dd",
layout: pattern(conversionPattern: '%d %-5p %c{1} - %m%n'),
file: 'C:/logs/usage.log'
)
}
info usage: "grails.app.controllers.com.example.MyController",
additivity: false
root {
info 'stdout', 'default'
additivity = true
}
info 'grails.app'
}
更新
我已经能够通过将特定的控制器类映射替换为
info usage: 'usage', additivity: true
然后使用
private static final log = LogFactory.getLog("usage")
似乎没有其他记录或描述的方法可以工作,理想情况下,我可以在包或类的基础上配置它,但这是可行的。您需要小心使用
info
等人期望的命名参数类型。以下配置适用于Grails 2.1.1测试项目:
// log4j configuration
log4j = {
appenders {
def logPattern = '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{2} - %m%n'
console name: 'stdout', layout: pattern(conversionPattern: logPattern)
appender new DailyRollingFileAppender(
name: 'usage', datePattern: "'.'yyyy-MM-dd",
layout: pattern(conversionPattern: logPattern),
file: 'usage.log'
)
}
root {
error 'stdout'
}
info additivity: false, usage: ["grails.app.controllers.com.example.MyController"]
}
我不确定这是否有区别,但我总是先放置不太具体的记录器定义,然后放置更具体的记录器定义(即,将
grails.app.controllers….
一个移动到grails.app
一个之后)。您使用的是什么版本的Grails?我使用的是2.1.0。遗憾的是,移动记录器定义没有任何区别。我仍然在默认的appender文件中获得所有日志消息,在usage appender文件中没有任何消息。这绝对是正确的语法,因此它应该可以工作,除非您在环境
块或外部配置文件中重写了log4j
闭包。谢谢您的建议。不幸的是,我在usage appender文件中仍然没有看到任何日志消息,所有内容都进入默认状态。我尝试更改root以包含用法appender,但是从信息级别或更高级别的所有内容都会进入用法日志,这根本不是我想要的。奇怪。尝试将System.out.println(log.name)
放入控制器的操作中,以确认它正在使用您认为它正在使用的记录器。