未在 tomcat 中创建日志文件
log file not being created in tomcat
我打算在生产环境中将我的应用程序部署到 tomcat 时为其创建一个日志文件。在开发过程中,我可以在 intellij 控制台中看到日志。
所以我用上述意图创建了以下 DSL(从 SO 中获取)
def catalinaBase = System.properties.getProperty('catalina.base')
println "This is catalinaBase: " + catalinaBase
if (!catalinaBase) catalinaBase = '.' // just in case
def logDirectory = "${catalinaBase}/logs"
// default for all environments
log4j = { root ->
appenders {
rollingFile name:'stdout', file:"${logDirectory}/myapp.log".toString(), maxFileSize:'100KB'
rollingFile name:'stacktrace', file:"${logDirectory}/myapp_stack.log".toString(), maxFileSize:'100KB'
}
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate'
root.level = org.apache.log4j.Level.WARN
}
// special settings with production env
environments {
production {
log4j = { root ->
appenders {
console name: 'stdout', layout: pattern(conversionPattern: "%d [%t] %-5p %c %x - %m%n")
}
warn 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate'
debug 'com.mypackage'
root.level = org.apache.log4j.Level.INFO
}
}
}
注意上面块中的println
。我已验证找到 catalina.base
的路径并将其输出到 catalina.out
但是,当我部署我的应用程序时,没有创建日志文件。此外,我的 log.info
日志正在写入 catalina.out
。
问题
- 部署应用程序时要创建的日志文件还需要做什么?
rollingFile name:'stacktrace'
是做什么的?它是否将堆栈跟踪记录到单独的文件中?如果是这样,它是内置的 log4j 吗?
复制你的附加程序
environments {
production {
log4j = { root ->
appenders {
rollingFile name:'stdout', file:"${logDirectory}/myapp.log".toString(), maxFileSize:'100KB'
rollingFile name:'stacktrace', file:"${logDirectory}/myapp_stack.log".toString(), maxFileSize:'100KB'
}
warn 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate'
debug 'com.mypackage'
root.level = org.apache.log4j.Level.INFO
}
}
}
关于你的第二个问题,可以参考
我打算在生产环境中将我的应用程序部署到 tomcat 时为其创建一个日志文件。在开发过程中,我可以在 intellij 控制台中看到日志。
所以我用上述意图创建了以下 DSL(从 SO 中获取)
def catalinaBase = System.properties.getProperty('catalina.base')
println "This is catalinaBase: " + catalinaBase
if (!catalinaBase) catalinaBase = '.' // just in case
def logDirectory = "${catalinaBase}/logs"
// default for all environments
log4j = { root ->
appenders {
rollingFile name:'stdout', file:"${logDirectory}/myapp.log".toString(), maxFileSize:'100KB'
rollingFile name:'stacktrace', file:"${logDirectory}/myapp_stack.log".toString(), maxFileSize:'100KB'
}
error 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate'
root.level = org.apache.log4j.Level.WARN
}
// special settings with production env
environments {
production {
log4j = { root ->
appenders {
console name: 'stdout', layout: pattern(conversionPattern: "%d [%t] %-5p %c %x - %m%n")
}
warn 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate'
debug 'com.mypackage'
root.level = org.apache.log4j.Level.INFO
}
}
}
注意上面块中的println
。我已验证找到 catalina.base
的路径并将其输出到 catalina.out
但是,当我部署我的应用程序时,没有创建日志文件。此外,我的 log.info
日志正在写入 catalina.out
。
问题
- 部署应用程序时要创建的日志文件还需要做什么?
rollingFile name:'stacktrace'
是做什么的?它是否将堆栈跟踪记录到单独的文件中?如果是这样,它是内置的 log4j 吗?
复制你的附加程序
environments {
production {
log4j = { root ->
appenders {
rollingFile name:'stdout', file:"${logDirectory}/myapp.log".toString(), maxFileSize:'100KB'
rollingFile name:'stacktrace', file:"${logDirectory}/myapp_stack.log".toString(), maxFileSize:'100KB'
}
warn 'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages', // GSP
'org.codehaus.groovy.grails.web.sitemesh', // layouts
'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
'org.codehaus.groovy.grails.web.mapping', // URL mapping
'org.codehaus.groovy.grails.commons', // core / classloading
'org.codehaus.groovy.grails.plugins', // plugins
'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
'org.springframework',
'org.hibernate'
debug 'com.mypackage'
root.level = org.apache.log4j.Level.INFO
}
}
}
关于你的第二个问题,可以参考