rails的日志是Common-logging + Log4j的组合,日志的配置在Config.groovy中完成。我们同样可以对它使用环境,比方说对于开发环境设置一个日志级别(如debug),对于产品环境则设置另一个(如error)。在运行时,Grails会根据日志配置在web-app/WEB-INF/classes中产生合适的log4j.properties。典型的日志配置如下:
log4j = {
error 'org.codehaus.groovy.grails.web.servlet',
'org.codehaus.groovy.grails.web.pages'
warn 'org.mortbay.log'
}
上面的配置针对不同的包设置了不同的日志级别,一般情况下,我们会对Grails自带包或工具包设为error,而对于工程相关的包则是在开发环境下设成debug,在产品环境下设为error。在了解如何进行这样的配置之前,我们先复习一下Log4j的相关概念。Log4j主要由3部分组成:
1.Logger:相当于日志的分类,root为根。所有的logger都继承root的设置。简单理解的话,不妨将类的包结构于Logger划上等号。参考文档中列出了一些Grails常用的Logger,请注意。
上面给出的例子是单独给不同的logger指定了不同的日志级别,如果相同级别的logger很多,一一指定的话就太麻烦了,这时可以通过设置root来完成。设置root有两种方法:
方法1:单独使用(log4j的闭包内)
root {
debug 'stdout', 'file'
additivity = true
}
方法2:使用log4j闭包传入的root:
log4j = { root ->
root.level = org.apache.log4j.Level.DEBUG
…
}
2.appender:负责日志输出。主要的appender有:
jdbc:输出到数据库
console:输出到stdout
file:输出到文件
rollingFile:输出到文件,达到预定大小后,文件自动分割
appender的指定也是在log4j闭包中完成的:
appenders {
rollingFile name:"myAppender",
maxFileSize:1024, file:"/tmp/logs/myApp.log"
}
使用则是在Logger中指定:
root {
debug 'myAppender'
additivity = true
}
3.layout:负责日志输出的格式。主要格式:
xml:xml格式
html:html格式
simple:简单文本
pattern:指定输出的模式
layout的指定是在appender中进行的:
appenders { console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n') }
接下来,回到我们刚才的问题:“针对开发环境设置debug,针对产品环境设置error”,整个配置如下:
log4j = {
environments {
production {
root {
error 'stdout'
additivity = true
}
}
development {
root {
debug 'stdout'
additivity = true
}
}
test {
root {
debug 'stdout'
additivity = true
}
}
}
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',
'net.sf.ehcache.hibernate',
'org.apache', //注意这里这一行和下一行
'net.sf'
warn 'org.mortbay.log'
}
接下来我们谈谈堆栈的输出。一般情况下,Grails会把完整的堆栈信息输出到stacktrace.log,而只在stdout显示过滤后的内容。但我们也可以改变它:
方法1,在标准输出上输出完整堆栈:error stdout:"StackTrace"
方法2,禁止堆栈过滤:grails -Dgrails.full.stacktrace=true run-app
Grails为我们使用日志提供了非常大的便利条件:每个应用部件都会被动态添加一个log属性,因此,在这些部件中可以直接使用log。如:log.debug "The value of foo is $foo"。在配置时,使用约定:grails.app.<artefacttype>.ClassName。主要的名称:
bootstrap:启动类
dataSource:数据源
tagLib:标签库
service:服务类
controller:控制器
domain:领域类
配置示例:
log4j = {
// 所有部件
info "grails.app"
// 特定的Controller
debug "grails.app.controller.YourController"
...
}</artefacttype>
分享到:
相关推荐
[Apress] Grails 2 权威指南 (英文版) [Apress] The Definitive Guide to Grails 2 (E-Book) ☆ 出版信息:☆ [作者信息] Jeff Scott Brown, Graeme Rocher [出版机构] Apress [出版日期] 2013年01月23日 ...
1. **集成易用**:Grails插件设计的目标之一就是易于集成到现有项目中。"Calendar"插件应该提供简单的方法,使得开发者可以快速地在他们的应用程序中添加一个交互式的日历组件。 2. **模板和样式**:插件可能包含了...
根据给定文件的内容,以下是对标题“grails和groovy的电子书-2”中涉及知识点的详细阐述: **为何选择Groovy和Grails?** 文档首先提出为何选择Groovy和Grails的疑问,这引出了几个关键点:生产力、乐趣以及Groovy...
Grails 上的 % Groovy % lyhcode % TWJUG 2014 年 9 月 20 日 你好,世界。 GitHub 中的示例代码 <style tyle="text/css"> pre.sourceCode { 背景:黑色; 填充:.5em; } .reveal h1 { /*background: -...
随着Web应用的不断发展,图像处理的需求也在日益增长。“grails-burning-image”插件的出现,不仅弥补了Grails在图像处理上的短板,还为开发者提供了更多的创新可能。随着技术的迭代,我们期待这款插件能够支持更多...
随着版本的不断迭代,Spring Security 的功能也日益强大。 #### 二、Spring Security 3.1 版本特性 Spring Security 3.1 版本是在 2012 年发布的,相较于之前的版本,它在原有的基础上做了大量的改进和增强,主要...
1. 路径规范化的盲点 路径规范化是确保系统一致性和安全性的一种方法,通过将路径标准化,以防止不同操作系统对相同路径的不同处理导致的安全漏洞。例如,Windows和Linux对待URL中“../”的处理方式不同,这可能导致...
2. **年月日时分秒布局** - 设计一个包含年、月、日、时、分、秒的布局结构,每个部分可以是单独的文本框或者滑动条。在Android中,可以使用`LinearLayout`或`RelativeLayout`,而在iOS中,可以使用`UIStackView`,...
14. **Grails**:如果文档较全面,可能会涉及Groovy的Web开发框架Grails的基础知识。 这个CHM文件“gdoc.chm”可能包含了所有这些内容的详细解释,帮助开发者快速掌握Groovy语言,解决实际编程中的问题。对于那些在...
Grails doc to Ja for Chrome 当您在浏览器上打开 Grails 文档的 URL 时,它会自动切换到日语站点: http://*.grails.org/doc/latest -> http://*.grails.jp/doc/latest 安装 从下载并将其放入 Chrome 窗口。
1. **多项目构建**:Gradle可以处理包含多个子项目的复杂项目结构,通过项目和任务之间的依赖关系清晰定义构建过程。 2. **构建生命周期支持**:适用于不同类型的软件构建,包括Web应用、移动应用以及传统的企业级...
Groovy在Java阵营中的地位日益显著,其主要特点包括: 1. **简洁的语法**:Groovy语法简洁,易于学习。它允许开发者使用更少的代码完成相同的工作,如省略类型声明、使用闭包等。 2. **动态性**:Groovy是动态类型...
在2014年4月1日发布的Groovy v2.2.2版本,是这个语言的一个稳定迭代,包含了众多优化和新特性。 Groovy的特性主要包括: 1. **简洁的语法**:Groovy的语法比Java更加简洁和灵活,支持闭包和匿名函数,可以减少大量...
Groovy 2.5.0-beta-2是这个语言的一个重要版本,它在2017年11月9日发布时,被视为Groovy的最新稳定版,文件大小约为15.4 MB。此版本的文档包含了全面的Groovy 2.5 API和开发者指南,旨在帮助用户理解和使用这一版本...
1. **认证(Authentication)**:Shiro提供了一套灵活的身份验证机制,能够处理多种类型的登录请求,包括基于表单的登录、记住我功能、双因素认证等。通过Shiro,开发人员可以轻松实现用户登录逻辑,并进行细粒度的...
- Groovy的`<variable1> = <variable2> = <new_value>`语法可以不使用临时变量进行值交换。 4. **ASCII字符与值转换** - Groovy支持直接通过`char`和`int`类型之间的隐式转换进行ASCII码转换。 5. **逐字符处理...
该会议于2010年10月19日至22日在芝加哥举行,由Guillaume Laforge主讲,主题为“to Infinity and Beyond”。Laforge是Groovy项目经理、JSR-241规范负责人,以及SpringSource Groovy开发部门负责人。他还是Grails框架...
6. **Groovy**:描述中的亮点,Groovy在2012年2月进入前50,这可能得益于Grails框架的普及,以及在构建自动化工具如Gradle中的广泛应用。 7. **PHP**:作为Web开发的常用语言,PHP在2012年依然广泛使用,WordPress...