Grails中的日志配置文件是grails-app/conf/logback.groovy,整个配置风格都是groovy的语法
下面做个详细的配置例 子
import grails.util.BuildSettings
import grails.util.Environment
import java.nio.charset.Charset
import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy
import ch.qos.logback.core.rolling.FixedWindowRollingPolicy
// See http://logback.qos.ch/manual/groovy.html for details on configuration
//此处为控制台输出配置
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
//输出样式配置
pattern = "%level [%date{yyyy-MM-dd HH:mm:ss}] %logger - %msg%n"
charset = Charset.forName("utf-8")
}
}
//取当前日期
def byDay = timestamp("yyyyMMdd")
appender("DEBUG", RollingFileAppender) {
//日志过滤器 过滤DEBUG级别 输出到DEBUG文件
filter(ch.qos.logback.classic.filter.LevelFilter){
level=DEBUG
onMatch=ch.qos.logback.core.spi.FilterReply.ACCEPT
onMismatch=ch.qos.logback.core.spi.FilterReply.DENY
}
file = "logs/debug-log-${byDay}.txt"
encoder(PatternLayoutEncoder) {
pattern = "%level [%date{yyyy-MM-dd HH:mm:ss}] %logger - %msg%n"
charset = Charset.forName("utf-8")
}
rollingPolicy(FixedWindowRollingPolicy) {
fileNamePattern = "logs/debug-log-${byDay}.%i.log"
minIndex = 1
maxIndex = 20
}
triggeringPolicy(SizeBasedTriggeringPolicy) {
maxFileSize = "2MB"
}
}
//日志过滤器 过滤INFO级别 输出到INFO文件
appender("INFO", RollingFileAppender) {
file = "logs/info-log-${byDay}.txt"
encoder(PatternLayoutEncoder) {
pattern = "%level [%date{yyyy-MM-dd HH:mm:ss}] %logger - %msg%n"
charset = Charset.forName("utf-8")
}
filter(ch.qos.logback.classic.filter.LevelFilter){
level=INFO
onMatch=ch.qos.logback.core.spi.FilterReply.ACCEPT
onMismatch=ch.qos.logback.core.spi.FilterReply.DENY
}
rollingPolicy(FixedWindowRollingPolicy) {
fileNamePattern = "logs/info-log-${byDay}.%i.log"
minIndex = 1
maxIndex = 20
}
triggeringPolicy(SizeBasedTriggeringPolicy) {
maxFileSize = "2MB"
}
//filter(ch.qos.logback.classic.filter.ThresholdFilter){
// level=INFO
//}
}
//日志过滤器 过滤WARN级别 输出到WARN文件
appender("WARN", RollingFileAppender) {
file = "logs/warn-log-${byDay}.txt"
encoder(PatternLayoutEncoder) {
pattern = "%level [%date{yyyy-MM-dd HH:mm:ss}] %logger - %msg%n"
charset = Charset.forName("utf-8")
}
filter(ch.qos.logback.classic.filter.LevelFilter){
level=WARN
onMatch=ch.qos.logback.core.spi.FilterReply.ACCEPT
onMismatch=ch.qos.logback.core.spi.FilterReply.DENY
}
rollingPolicy(FixedWindowRollingPolicy) {
fileNamePattern = "logs/warn-log-${byDay}.%i.log"
minIndex = 1
maxIndex = 20
}
triggeringPolicy(SizeBasedTriggeringPolicy) {
maxFileSize = "2MB"
}
}
//日志过滤器 过滤ERROR级别 输出到ERROR文件
appender("ERROR", RollingFileAppender) {
file = "logs/error-log-${byDay}.txt"
encoder(PatternLayoutEncoder) {
pattern = "%level [%date{yyyy-MM-dd HH:mm:ss}] %logger - %msg%n"
charset = Charset.forName("utf-8")
}
filter(ch.qos.logback.classic.filter.LevelFilter){
level=ERROR
onMatch=ch.qos.logback.core.spi.FilterReply.ACCEPT
onMismatch=ch.qos.logback.core.spi.FilterReply.DENY
}
rollingPolicy(FixedWindowRollingPolicy) {
fileNamePattern = "logs/error-log-${byDay}.%i.log"
minIndex = 1
maxIndex = 20
}
//日志输出文件最大为2M
triggeringPolicy(SizeBasedTriggeringPolicy) {
maxFileSize = "2MB"
}
}
appender("FILE", RollingFileAppender) {
rollingPolicy(TimeBasedRollingPolicy) {
fileNamePattern = "logs/logFile.%d{yyyyMMdd}.log"
maxHistory = 30
}
encoder(PatternLayoutEncoder) {
pattern = "%level [%date{yyyy-MM-dd HH:mm:ss}] %logger - %msg%n"
charset = Charset.forName("utf-8")
}
}
def targetDir = BuildSettings.TARGET_DIR
//如果是开发模式采用此方案
if (Environment.isDevelopmentMode() && targetDir != null) {
appender("FULL_STACKTRACE", FileAppender) {
file = "${targetDir}/stacktrace.log"
append = true
encoder(PatternLayoutEncoder) {
pattern = "%level %logger - %msg%n"
charset = Charset.forName("utf-8")
}
}
logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
//root(INFO, ['STDOUT','ERROR','WARN','INFO','DEBUG','FULL_STACKTRACE','FILE'])
root(INFO, ['STDOUT','ERROR','WARN','INFO','DEBUG'])
}
else {
//其他情况日志方案
root(INFO, ['STDOUT','FILE'])
}