5

パッケージまたはクラスのログ出力を特定のアペンダーに入れたい。しかし、すべてがルートロガーに出力されます。

これが私の設定です:

log4j = {
    appenders {
        console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
        file name:'grailslog', file:'grails.log', threshold:org.apache.log4j.Level.DEBUG
        file name:'mylog', file:'mylog.log', threshold:org.apache.log4j.Level.DEBUG
    }

    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'

    warn   'org.mortbay.log'

    debug  'grails.app'

    debug  mylog: 'my.package', additivity: true

    root {
      error 'grailslog'
      additivity = true
    }
}

私もこの構文を試しました:

log4j = {
    appender.stdout = "org.apache.log4j.ConsoleAppender"
    appender.'stdout.layout'="org.apache.log4j.PatternLayout"
    appender.'stdout.layout.ConversionPattern'='[%r] %c{2} %m%n'

    appender.mylog= "org.apache.log4j.DailyRollingFileAppender"
    appender.'mylog.File' = "mylog.log"
    appender.'mylog.layout' = "org.apache.log4j.PatternLayout"
    appender.'mylog.layout.ConversionPattern' = '%d{[ dd.MM.yy HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n'

    appender.grailslog = "org.apache.log4j.DailyRollingFileAppender"
    appender.'grailslog.File' = "grails.log"
    appender.'grailslog.layout' = "org.apache.log4j.PatternLayout"
    appender.'grailslog.layout.ConversionPattern' = '%d{[ dd.MM.yy HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n'

    rootLogger="error,stdout,grailslog"

    logger {
      grails="info,stdout,grailslog"
      my.package="debug,mylog"
    }
}

しかし、これは現在のgrailsバージョンでは機能しなくなりました。


短い更新:

Grailsには、log-DSL(ドメイン固有言語)の新しいドキュメントがあります。したがって、上記のコードの構文は間違っています。

彼らが書きました:

...ロガーの名前は'grails.app。(type)。(className)'..。

4

2 に答える 2

2

他のログファイルをなんとか使用できました。

パッケージ名のロガーを使用する代わりに、カスタム名を使用して、これでロガーを初期化しました。

debug  mylog: 'myLog', additivity: true

[...]

def log = Logger.getLogger("myLog")
于 2010-11-10T14:21:01.140 に答える
0

環境ごとのログを追加したので、本番ログはファイル/メールに移動し、開発者はstdoutに移動します

environments {
  development {
    debug 'grails.app', 'stdout'
    //trace 'org.hibernate.type'

  }
  production {
    appenders {
      file name: "file", file: "/var/log/myapp.log"
      appender new SMTPAppender(name: 'smtp', to: mail.error.to, from: mail.error.from,
          subject: mail.error.subject, threshold: Level.ERROR,
          SMTPHost: mail.error.server, SMTPUsername: mail.error.username,
          SMTPDebug: mail.error.debug.toString(), SMTPPassword: mail.error.password,
          layout: pattern(conversionPattern:
          '%d{[ dd.MM.yyyy HH:mm:ss.SSS]} [%t] %n%-5p %n%c %n%C %n %x %n %m%n'))
    }

    root {
      error 'stdout', 'smtp','file'
      additivity = true
    }
  }
}
于 2010-10-22T13:23:07.420 に答える