2015-09-01 9 views
22

Próbuję skonfigurować usługę Logback do wysyłania wiadomości e-mail, gdy wystąpi wyjątek (poziom rejestrowania: błąd). Nie udało mi się sprawić, by działało tak daleko, więc chciałbym poprosić o pomoc przy konfiguracji.Wiosenne uruchamianie - wysyłanie wiadomości e-mail z logbackami

Mam aplikacji rozruchu wiosna gdzie niektóre przetwarzanie odbywa się:

private void foo() { 
try { 
    // do something 
} catch (Exception e) { 
    log.error("Logging my exception"); 
} 
} 

chciałbym wywołać e-mail, gdy ten błąd jest rejestrowany. Śledziłem niektóre tutorials i dodałem logback.xml i SMTP-appender.xml do mojego resources katalogu:

logback.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <include resource="org/springframework/boot/logging/logback/base.xml" /> 
    <include resource="smtp-appender.xml" /> 
    <logger name="com.mycompany" level="DEBUG"> 
     <appender-ref ref="SMTP" /> 
    </logger> 
</configuration> 

SMTP appender.xml

<?xml version="1.0" encoding="UTF-8"?> 

<included> 
    <appender name="SMTP" class="ch.qos.logback.classic.net.SMTPAppender"> 
     <smtpHost>xxx</smtpHost> 
     <username>user</username> 
     <password>password</password> 

     <to>[email protected]</to> 
     <from>[email protected]</from> 
     <subject>testError</subject> 

     <layout class="ch.qos.logback.classic.html.HTMLLayout" /> 

    </appender> 
</included> 

Mam ustawiony lokalny smtpserver na localhost przez sendmail. Próbowałem również z serwerem SMTP AWS i Gmailem. Żadna z tych usług nie sprawdziła się do tej pory.

Problem polega na tym, że nie otrzymuję żadnych wiadomości e-mail po wystąpieniu wyjątku i nie ma dosłownie żadnego wyjścia odpowiadającego logbackowi (poza wyjściem log.error()), co powoduje, że myślę, że aplikacja nawet nie wie o tej konfiguracji pliki ...

są to moi zależnościami Maven w pom.xml:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.5.RELEASE</version> 
    <relativePath /> 
    <!-- lookup parent from repository --> 
</parent> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.projectlombok</groupId> 
     <artifactId>lombok</artifactId> 
     <version>1.16.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.json</groupId> 
     <artifactId>json</artifactId> 
     <version>20141113</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4</version> 
    </dependency> 
</dependencies> 

Każda pomoc będzie bardzo mile widziane.

+0

ja nie widzę ** JavaBeans ramy aktywacyjny ** wliczone w pom i to jest potrzebne do wysyłania poczty za pośrednictwem logowania – Deh

+0

dodałem zależność do pom: http://mvnrepository.com/artifact /javax.activation/activation/1.1.1 ale to nie rozwiązuje problemu – Smajl

+0

ani logback i slf4j są włączone – Deh

Odpowiedz

1

Domyślny wpis dla portu w aplikacji smtpappender to 25, Gmail korzysta z uwierzytelniania dla usług smtp i potrzebujesz portów 587 dla TLS i 465 dla SSL.

Powiedziałbym, że to może być twój problem.

Spróbuj najpierw skonfigurować serwer pocztowy na komputerze lokalnym bez uwierzytelniania i spróbuj swoich dołączonych utworów. następnie spróbuj znaleźć sposób skonfigurowania go dla Gmaila.

Od strony http://logback.qos.ch/manual/appenders.html#gmailSTARTTLS

SMTPAppender Gmail (STARTTLS)

<configuration> 
    <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> 
    <smtpHost>smtp.gmail.com</smtpHost> 
    <smtpPort>587</smtpPort> 
    <STARTTLS>true</STARTTLS> 
    <username>[email protected]</username> 
    <password>YOUR_GMAIL_xPASSWORD</password> 

    <to>EMAIL-DESTINATION</to> 
    <to>ANOTHER_EMAIL_DESTINATION</to> <!-- additional destinations are possible --> 
    <from>[email protected]</from> 
    <subject>TESTING: %logger{20} - %m</subject> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%date %-5level %logger - %message%n</pattern> 
    </layout>  
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="EMAIL" /> 
    </root> 
</configuration> 
+0

Próbowałem wysłać wiadomość e-mail z localhost (skonfigurowałem lokalnie serwer sendmaila smtp), ale to też nie działało. Uważam, że problem polega nie na określaniu portów i konfiguracji hosta, ale na całej integracji w ogóle ... – Smajl

+0

@Smajl może, z konfiguracją, którą miałeś, i tak nie pracowałbym. jeśli uważasz, że jest to problem z integracją, spróbuj debugować swoją aplikację, czy coś jest przekazywane do aplikacji i jaka magia się tam dzieje. – user902383

2

Pls obejmują następujące (od mojego projektu roboczego) na pom.xml & logback.xml w celu uzyskania błędzie mail: -

pom.xml

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.4</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>1.6.4</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4</version> 
    </dependency> 

logback.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appender name="errMailer" class="ch.qos.logback.classic.net.SMTPAppender"> 
     <smtpHost>xxx</smtpHost> 
     <smtpPort>25</smtpPort> 
     <from>[email protected]</from> 
     <to>[email protected]</to> 
     <subjectStr>App Err Mail</subjectStr> 
     <layout class="ch.qos.logback.classic.html.HTMLLayout"/> 
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
      <level>ERROR</level> 
     </filter> 
    </appender> 
    <root level="ERROR"> 
     <appender-ref ref="errMailer" /> 
    </root> 
</configuration> 
+0

Dziękuję za odpowiedź, ale to nie rozwiązuje problemu. – Smajl

+1

To jest działający fragment kodu z mojego aktywnego projektu. Pls udostępniają szczegóły dotyczące problemu, który pojawił się po użyciu tego narzędzia wraz z obsługą stosu błędów. – Avis

+0

Nie wiem, co należy uwzględnić ... Użyłem Twojego kodu, a komunikat o błędzie został wyświetlony w konsoli, ale nie wysłano e-maila (lub został wyzwolony, ale go nie odebrałem). Co masz na myśli przez "wspieranie stacktrace błędu?" Używam poziomu: DEBUG, który obsługuje BŁĘDY – Smajl

0

Musisz włączyć Marker oparty wyzwalanie email.

obejmują oceniającego w swoim logback.xml pod SMTP appender patrz poniżej linku

http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

następnie dodać poniżej logiki w bloku catch Exception, przekaż obiekt Marker metody rejestratora jeśli chcesz wysłać wiadomość e-mail jak poniżej -

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN"); 
logger.error(notifyAdmin, 
    "This is a serious an error requiring the admin's attention", 
    new Except 
ion("Just testing")); 

jego możliwe, że w jakimś scenariuszu nie chcesz wysłać wiadomość e-mail, a jedynie chce się zalogować wyjątek następnie po prostu nie przechodzą obiektu Marker metody rejestratora.

logger.error("This is a serious an error requiring the admin's attention", 
    new Except 
ion("Just testing")); 
Powiązane problemy