6 votes

Notification par courriel de Grails en cas d'erreur Grails

Existe-t-il un moyen de m'envoyer les détails chaque fois qu'une erreur Grails se produit sur un site Grails ? Quelle est la meilleure façon de mettre cela en place ? En un seul endroit ? (j'essaie de rester DRY)

Et je voudrais inclure l'URL qui a produit l'erreur.

3voto

Kushal Likhi Points 488

. Si vous avez l'intention d'attraper n'importe quelle exception se produisant sur votre projet et de l'envoyer, eh bien j'utilise une telle installation, et je l'ai fait de la manière suivante : .

  1. Création d'une étiquette dans la TagLib :

    def reportError = {attrs, body ->
            String error = body()
            //error will have the Error Details, you can mail this string :)
            //mail example
            mailService.mailError(error) //just an example
            //if you want to show the error on the error page
            out << error
            //if you want to show any custom message
            out << "Error mailed, check Email"
     }
  2. Dans la page GSP views/error.gsp, remplacez " <g:renderException exception="${exception}"/> " Tag avec " <myTagLib:reportError><g:renderException exception="${exception}"/></myTagLib:reportError> "

TOUT EST FAIT... :)

Maintenant, ce qui se passe, c'est que chaque fois qu'une exception se produit (même dans les appels AJAX), la demande est redirigée vers la page d'erreur, où nous pouvons capturer toutes les erreurs.

Le seul endroit où cette configuration ne fonctionnera pas est dans le cas d'exécutions qui ne sont pas liées à la demande, c'est-à-dire : JOBS.

Avec cette méthode, j'ai pu attraper toutes les exceptions inattendues :) ..

c'est comme ça que je fais, j'espère que ça aide :)

Salutations Kushal

2voto

Ziad El-Jayyousi Points 636

Vous devriez regarder les appenders de log4j, vous pourriez placer ce code dans config.groovy à l'intérieur du nœud de configuration de log4j, vous pourriez également contrôler le niveau de rapport, le modèle de conversation, etc :

   appenders {
      appender new SMTPAppender(
         name: "smtp", to: "your email here", from: "no-reply@myserver.com",
         subject: "Grails app error", threshold: Level.ERROR,
         SMTPHost: smpt.yoursmtpserver, SMTPUsername: username,
         SMTPDebug: mail.error.debug.toString(), SMTPPassword: password,
         layout: pattern(conversionPattern:
            '%d{[ dd.MM.yyyy HH:mm:ss.SSS]} [%t] %n%-5p %n%c %n%C %n %x %n %m%n'))
   }

1voto

N Kaushik Points 101

J'ai constaté que le SMTPAppender ne semblait pas fonctionner très bien avec les versions ultérieures de JavaMail. J'ai utilisé le code d'ici http://code.google.com/p/log4j-gmail-smtp-appender/ J'ai ajouté la classe dans mon projet en tant que classe groovy, puis je l'ai configurée pour qu'elle soit utilisée comme la réponse de SMTPAppender ci-dessus.

0voto

stokito Points 89

Voici un exemple de mon Config.groovy basé sur Article sur Burt Beckwith

mail.error.server = 'smtp.yandex.ru' // or 'smtp.gmail.com'
mail.error.port = 465                // or 587 for gmail
mail.error.username = 'do.not.reply@example.com'
mail.error.password = 'site email password'
mail.error.to = 'admin.email@gmail.com'
mail.error.from = "${appName} <${mail.error.username}>"
mail.error.subject = "[Application Error] ${appName} on ${grails.serverURL}"
mail.error.starttls = true
mail.error.protocol = 'smtps' // 'smtps'  for secure protocol (SSL)
mail.error.debug = false
/*
The nice thing in this Appender is that you can send email alerts containing more than just your Exception.
 You can also add lines that were logged before the exception.
 This will make it much easier to understand the cause of your exception.
 The number of log lines that will be sent can be determine by “BufferSize” property.
 For example: if BufferSize=10, then your email will also contain the 9 lines logged before the exception.
 default 512
 */
mail.error.bufferSize = 512

// log4j configuration
log4j = {
    appenders {
        // stdout, default console appender
        appender new ConsoleAppender(name: 'stdout',
                threshold: Level.TRACE,
                layout: simple)
        // main
        appender new RollingFileAppender(name: 'main',
                threshold: Level.TRACE,
                layout: pattern(conversionPattern: '%d %c{2} %-5p %m%n'),
                file: "/var/log/${appName}/main.log",
                maxFileSize: 1024
        )
        // To send all errors or bigger level messages in email via SMTPAppender
        // Careful. If your SMTP server goes down, you may run into a thread deadlock scenario.
        System.setProperty 'mail.smtp.port', config.mail.error.port.toString()
        System.setProperty 'mail.smtp.starttls.enable', config.mail.error.starttls.toString()
        appender new SMTPAppender(name: 'smtp',
                threshold: Level.INFO,
                layout: pattern(conversionPattern: '%d{[ dd.MM.yyyy HH:mm:ss.SSS]} [%t] %n%-5p %n%c %n%C %n %x %n %m%n'),  // %5p: %d{dd MMM yyyy, HH:mm:ss} - %m%n'
                to: config.mail.error.to,
                from: config.mail.error.from,
                subject: config.mail.error.subject,
                SMTPHost: config.mail.error.server,
                SMTPUsername: config.mail.error.username,
                SMTPDebug: config.mail.error.debug.toString(),
                SMTPPassword: config.mail.error.password,
                SMTPProtocol: config.mail.error.protocol,
                bufferSize: config.mail.error.bufferSize
        )
    }

    all 'grails.app'  // Logging all for all application artifacts
    info 'grails.app.conf', // For anything under grails-app/conf such as BootStrap.groovy (but excluding filters)
            'grails.app.filters', // For filters
            'grails.app.taglib', // For tag libraries
            'grails.app.services', // For service classes
            'grails.app.controllers', // For controllers
            'grails.app.domain' // For domain entities
    error 'org.codehaus.groovy.grails.web.servlet', // controllers
            'org.codehaus.groovy.grails.web', // Grails web request processing
            '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', // See what Spring is doing
            'org.hibernate', // See what Hibernate is doing
            'net.sf.ehcache.hibernate'
    // Enable Hibernate SQL logging with param values
    trace 'org.hibernate.type'
    debug 'org.hibernate.SQL'

    environments {
        development {
            // Override previous setting for 'grails.app.controller'
            all 'grails.app'
            root {
                all 'stdout'
            }
            //NOTE target/stacktrace.log would be created anyway
        }
        test {
            // Override previous setting for 'grails.app.controller'
            info 'grails.app'
            root {
                info 'stdout'
            }
            //NOTE target/stacktrace.log would be created anyway
        }
        production {
            // Override previous setting for 'grails.app.controller'
            warn 'grails.app'
            root {
                warn 'main', 'smtp'
                additivity = true
            }
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X