Grails中分级日志以及日志管理的配置(Grails3)

本文详细介绍了Grails3应用程序的日志配置,包括通过grails-app/conf/logback.groovy文件设置不同级别的日志输出,如DEBUG, INFO, WARN和ERROR,并分别写入不同的文件。配置中使用了SizeBasedTriggeringPolicy限制每个日志文件的最大大小,并利用FixedWindowRollingPolicy进行文件滚动。此外,还特别针对开发模式进行了特殊的日志输出配置。" 119761487,11344627,深度学习笔记:Regression模型优化与正则化,"['深度学习', '机器学习', '模型优化', '正则化', '梯度下降']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'])
}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值