使用Log4j获取Grails的整个流日志

时间:2016-08-30 05:24:06

标签: grails log4j rollingfileappender

让我们假设我有一个cron作业类作为SampleTestJob,它将通过调用utilService findAllAdmins方法获取管理员列表。 在每个类中都添加了日志。 我需要将整个流的日志打印到单独的日志文件中。 为此,我使用了TimeBasedRollingPolicy的RollingFileAppender,这样每天都会创建一个zip的备份。 在Config.groovy中,我列出了整个流程的类名,例如SampleTestJob,UtilService。 执行SampleTestJob时,SampleTestJob和UtilService的日志将打印到我的日志文件中。 我的问题是,我只希望打印SampleTestJob的整个流程,是的,它打印出来。 但是当AdminAtroller在此示例中由另一个类调用findAllAdmins时,它也会被打印在同一个日志文件中。 我怎么阻止这个?有没有更好的方法来实现这个?

同样没有列出整个流程的["grails.app.jobs.SampleTestJob", "grails.app.services.UtilService"]类,有一种方法可以识别并将所有日志打印到日志文件中。

class SampleTestJob{

def utilService

def execute() {
    log.info "Beginning SampleTestJob."
    List<Admin> adminList = utilService.findAllAdmins()//Calling the findAllAdmins of utilService.
    log.info "Finished SampleTestJob."

}
}

class UtilService{

def findAllAdmins() {
    log.info "Beginning findAllAdmins."
    //Implementation to get all the admins
    log.info "Finished findAllAdmins."
}
}

class AdminController{

def utilService

def listAdmins() {
    log.info "Beginning listAdmins."
    List<Admin> adminList = utilService.findAllAdmins()//Calling the findAllAdmins of utilService.
    log.info "Finished listAdmins."
}
}

def sampleTestJob = new SampleTestJob() sampleTestJob.execute()

Config.groovy中

log4j = {

def logDir = 'target' + '/logs'
def logPattern = '%d [%t] %-5p %c{2} %x - %m%n'

def jobRollingFile   = new RollingFileAppender(name: 'SampleLogs', layout: pattern(conversionPattern: logPattern))
def jobRollingPolicy = new TimeBasedRollingPolicy(fileNamePattern: "$logDir/Logs/Sample.%d{yyyy-MM-dd}.gz", activeFileName: "$logDir/Logs/Sample.log")
jobRollingPolicy.activateOptions()
jobRollingFile.setRollingPolicy jobRollingPolicy

appenders {
    appender jobRollingFile
}

info additivity: false, SampleLogs   : ["grails.app.jobs.SampleTest", "grails.app.services.UtilService"]

}

0 个答案:

没有答案