2010-10-22 8 views
5

Ich möchte Log-Ausgabe meiner Pakete oder Klassen in einem bestimmten Appender haben. Aber alles wird zum Root-Logger ausgedruckt.senden Log-Ausgabe an verschiedene Dateien in Grails 1.3.2

Hier ist meine config:

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 
    } 
} 

Ich habe auch versucht, diese Syntax:

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" 
    } 
} 

Aber das funktioniert nicht mehr mit der aktuellen Grails-Version.


Ein kurzes Update:

Grails hat eine neue Dokumentation für den Log-DSL (Domain Specific Language). Daher hat der obige Code eine falsche Syntax.

Sie schrieben:

... der Name des Loggers ist ...

Antwort

2

ich es geschafft, meine andere Protokolldatei zu verwenden.

Anstatt einen Logger mit dem Paketnamen zu verwenden, habe ich einen benutzerdefinierten Namen verwendet und meinen Logger damit initialisiert.

debug mylog: 'myLog', additivity: true 

[...] 

def log = Logger.getLogger("myLog") 
0

Ich habe pro Umgebung hinzugefügt 'grails.app (Typ) (classname)..' so meine Produktionsprotokolle in einer Datei/E-Mail & Entwickler gehen Anmeldung gehen an 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 
    } 
    } 
} 
+1

Ok, das sieht gut aus. Aber ich möchte verschiedene Paketmitglieder oder Log-Level in verschiedenen Logs protokollieren. In meinem obigen Beispiel möchte ich alles von "my.package" in einem separaten Protokoll. – steyze

Verwandte Themen