少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述为什么Grails(在Tomcat中)记录到catalina.out和我的自定义文件appender?相关的知识,希望能为你提供帮助。
我在Grails 1.2中的log4j DSL配置中有以下内容:
log4j = {
appenders {
console name: 'stdout', layout: pattern(conversionPattern: conversionPattern)environments {
production {
// ... some code to determine file path ...rollingFile name: 'file', file: "${logDirectory}/${appName}.log", layout: pattern(conversionPattern: conversionPattern)
rollingFile name: 'StackTrace', file: "${logDirectory}/${appName}-stacktrace.log"
}
}environments {
development { root { warn 'stdout' } }
test { root { warn 'stdout' } }
production { root { error 'file' } }
}// ... package-specific logging configurations ...
}
当我作为战争部署到Tomcat时,我的日志被写入catalina.out和我为生产定义的'文件'记录器。
我试过了:
- 将
additivity = false
添加到root {}
定义为production {}
,这不起作用(我真的不期望它,因为它显然设置了根记录器本身的可加性?)。 - 在
development {}
闭包内的test {}
和appenders {}
块中定义'stdout'控制台appender,但这也不起作用。
如何防止在生产中将日志写入catalina.out?
答案【为什么Grails(在Tomcat中)记录到catalina.out和我的自定义文件appender()】我能够通过在
Config.groovy
中执行以下操作来解决此问题:import org.apache.log4j.Loggerlog4j = {
// ... configuration from question ...
}environments {
production {
def logger = Logger.getRootLogger()
logger.removeAppender('stdout')
}
}
然而,这感觉就像一个肮脏的黑客,我希望有一个更好的,Grails log4j DSL特定的方式来做到这一点。
此外,应用程序可能会写入stdout的任何内容都可能无法编写,如果将某些日志/异常/堆栈跟踪以某种方式直接写入stdout,这可能是一件坏事。
另一答案在grails 2.4.5中,您可以为stdout定义一个'null'appender
https://grails.github.io/grails2-doc/2.4.x/guide/conf.html#logging
log4j = {
...
appenders {
'null' name: 'stdout'
}
...
}
推荐阅读
- 如何拍照,保存并在Android中获取照片
- 使用Google Apps脚本删除Google表格中的行
- 仅在Google Apps脚本中是新文件时才解压缩文件
- Android 禁止截屏录屏 — 解决PopupWindow无法禁止录屏问题
- Android DSelectorBryant 单选滚动选择器
- 熟悉Android打包编译的流程
- APP功能测试要点
- Android BSearchEdit 搜索结果选择框
- 在SiteGround上托管WordPress的完整指南