忽略Grails日志配置
问题描述:
Log4j似乎忽略了Config.groovy中的一些Grails日志记录设置,但忽略了其他日志设置。我在tomcat上运行Grails 2.2.1。忽略Grails日志配置
我已经建立了我的配置文件(如下)以将所有错误和更高的消息记录到控制台(它映射到tomcat中的catalina.out),解析,计划和联合包中的所有信息和更高的消息master.log,并且所有解析,计划和联合包中的更高的消息调试到它们各自的解析,计划和联合日志。
在appenders部分中提到的所有文件都在适当的位置创建并接收日志消息。然而,MASTER.LOG正在接受调试消息,都MASTER.LOG和syndicate.log已发展到19GB大小,当配置显然他们限制为25MB ...
谁能明白我我做错了吗? Grails如何尊重我的配置的一行而不是下一行?我的Config.groovy文件的相关部分是:
log4j = {
// Uncomment to override the default logging level across all
// classes.
root {
warn catalinaOut
}
appenders {
// this line prevents all messages from being duplicated to stdout DONT DELETE
console name: "stdout",
layout: pattern(conversionPattern: "")
console name: "catalinaOut",
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
file name: "dcsFileAppender",
file: "logs/data-collection-system/master.log",
maxFileSize: "25MB",in
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
file name: "parseFileAppender",
file: "logs/data-collection-system/parse.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
file name: "scheduleFileAppender",
file: "logs/data-collection-system/schedule.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
file name: "syndicateFileAppender",
file: "logs/data-collection-system/syndicate.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
}
environments {
production {
info dcsFileAppender: ["com.progauge.icp.parse", "com.progauge.icp.schedule", "com.progauge.icp.syndicate"]
all parseFileAppender: ["com.progauge.icp.parse"],
scheduleFileAppender: ["com.progauge.icp.schedule"],
syndicateFileAppender: ["com.progauge.icp.syndicate"]
}
}
}
作为一个方面说明,我不得不为标准输出模式设置为空字符串,因为我不想标准控制台日志记录行为,但设置附加器为null打破了我的自定义控制台日志记录,这也是我不想要的。
答
我看到与配置三个主要问题,你有这么远:
- 日志级别设置每个记录 - 如果你想从同一个记录器,以不同的appender发送不同级别的消息,那么你需要将记录器设置为最详细的级别,然后在相关的附加程序上设置阈值以过滤掉日志级别过高的消息。
- 如果要限制文件大小和进行备份,那么你应该使用
rollingFile
类型的追加程序,而不是file
- 打压默认
stdout
的appender你应该使用'null'
(这是四个字符的字符串null作为反对null
值,并且定义了一个忽略写入它的任何日志消息的接收器(Log4JNullAppender
)。
尝试更多的东西是这样的:
log4j = {
// Uncomment to override the default logging level across all
// classes.
root {
warn 'catalinaOut'
}
appenders {
// this line prevents all messages from being duplicated to stdout
'null' name: "stdout"
console name: "catalinaOut",
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
// threshold to make this appender only log INFO and higher messages
rollingFile name: "dcsFileAppender",
file: "logs/data-collection-system/master.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n"),
threshold: org.apache.log4j.Level.INFO
rollingFile name: "parseFileAppender",
file: "logs/data-collection-system/parse.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
rollingFile name: "scheduleFileAppender",
file: "logs/data-collection-system/schedule.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
rollingFile name: "syndicateFileAppender",
file: "logs/data-collection-system/syndicate.log",
maxFileSize: "25MB",
maxBackupIndex: 10,
layout: pattern(conversionPattern: "%-5p [%d] %c{2} %m%n")
}
environments {
production {
all parseFileAppender: ["com.progauge.icp.parse"],
scheduleFileAppender: ["com.progauge.icp.schedule"],
syndicateFileAppender: ["com.progauge.icp.syndicate"],
dcsFileAppender: ["com.progauge.icp.parse", "com.progauge.icp.schedule", "com.progauge.icp.syndicate"]
}
}
}
好了,变化到stdout杀死了所有登录到控制台,但其他两个建议的工作,而这些都是我一直在与有关。谢谢。 – therealmitchconnors 2013-03-19 19:03:44
@therealmitchconnors而不是尝试和完全禁止默认的'stdout' appender,并在它的位置创建另一个控制台appen只是简单地说'console name:'stdout',layout:...'并使用'stdout'代替'catalinaOut' – 2013-03-19 19:59:35
问题是,当我这样做的时候,我得到了两个去控制台的日志消息的实例:一个通过我配置的记录器,一个通过grails的隐式默认记录器。 – therealmitchconnors 2013-03-20 23:07:11