Grailsのログ出力設定

Grailsのログ出力設定って結構はまりやすい気がしてて、自分でもかなり悩んだ気がするので、参考までにログ出力関係の設定を貼っておきます。

// log4j configuration
log4j {
    // for Debug
    appender.stdout = "org.apache.log4j.ConsoleAppender"
    appender.'stdout.layout'="org.apache.log4j.PatternLayout"
    appender.'stdout.layout.ConversionPattern'='%d{yyyy-MMM-dd HH:mm:ss,SSS} [%p] (%c{2}) %m%n'

    // for Error
    appender.stacktraceLog = "org.apache.log4j.FileAppender"
    appender.'stacktraceLog.layout'="org.apache.log4j.PatternLayout"
    appender.'stacktraceLog.layout.ConversionPattern'='%d{yyyy-MMM-dd HH:mm:ss,SSS} [%p] (%c{2}) %m%n'
    appender.'stacktraceLog.File'="log/stacktrace.log"
   
    // Default
    rootLogger="error,stdout"

    logger {
        // for My application
        grails {
            app {
                controller='info'
                service='info'
                task='info' // quartzプラグインのJobsアーティファクト用
            }
        }

        // for others library / framework
        StackTrace="error,stacktraceLog"
        org {
            codehaus.groovy.grails.web.servlet="error"  //  controllers
            codehaus.groovy.grails.web.pages="error" //  GSP
            codehaus.groovy.grails.web.sitemesh="error" //  layouts
            codehaus.groovy.grails."web.mapping.filter"="error" // URL mapping
            codehaus.groovy.grails."web.mapping"="error" // URL mapping
            codehaus.groovy.grails.commons="info" // core / classloading
            codehaus.groovy.grails.plugins="error" // plugins
            codehaus.groovy.grails.orm.hibernate="error" // hibernate integration
            springframework="off"
            hibernate="off"
        }
        //org.'springframework.security'='info' // Acegi plugin
        org.'springframework.security'='debug' // Acegi plugin
    }

    additivity {
        StackTrace=false
    }

こんな感じです。


アーティファクト系は、logger > grails > app の下にパッケージ名を追加すればOKです。

パッケージ名を調べる方法

パッケージ名が何か分からなければ、そのアーティファクトに

log.error "とりあえず出力!!!"

と書いて、出力されたログを見ます。

2009-3-01 12:11:30,607 [ERROR] (task.HogeJob) とりあえず出力!!!

とでていれば、このアーティファクトHogeJobのパッケージは"task"になります。


上の例はquartzプラグインなんですが、アーティファクトサフィックスは"Job"なのに、パッケージは"task"ってなんでやねん!