Architecture Practical Chapter (13): Spring Boot Logback e-posta bildirimi

Günlükler, uygulamalar için çok önemlidir. Programınız bir hata bildirdiğinde ve bunun ne kadar kötü olduğunu bilmediğinizde, bu makale, program hata bilgilerini geliştiriciye e-posta ile göndermek için günlük geri alma özelliğini kullanır.

Dizin Yapısı

Dizin Yapısı

Proje bağımlılığı yapılandırması

pom.xml

< ? xml version = "1.0" encoding = "UTF-8"? > < proje xmlns = " xmlns: xsi = " xsi: schemaLocation = " > < modelVersion > 4.0.0 < / modelVersion > < Grup kimliği > com.itunion < /Grup kimliği > < artifactId > Spring-boot-log-mail < / artifactId > < versiyon > 0.0.1-SNAPSHOT < / version > < ambalaj > kavanoz < / paketleme > < isim > Spring-boot-log-mail < / isim > < açıklama > Spring Boot için demo projesi < /açıklama > < ebeveyn > < Grup kimliği > org.springframework.boot < /Grup kimliği > < artifactId > Spring-boot-starter-ebeveyn < / artifactId > < versiyon > 2.0.3. YAYIN < / version > < göreceli yol/ > < ! - depodan ebeveyn araması - > < / ebeveyn > < özellikleri > < project.build.sourceEncoding > UTF-8 < /project.build.sourceEncoding > < project.reporting.outputEncoding > UTF-8 < /project.reporting.outputEncoding > < java.version > 1.8 < /java.version > < /özellikleri > < bağımlılıklar > < bağımlılık > < Grup kimliği > org.springframework.boot < /Grup kimliği > < artifactId > Spring-boot-starter-web < / artifactId > < /bağımlılık > < bağımlılık > < Grup kimliği > org.springframework.boot < /Grup kimliği > < artifactId > Spring-boot-devtools < / artifactId > < dürbün > Çalışma süresi < /dürbün > < /bağımlılık > < bağımlılık > < Grup kimliği > org.springframework.boot < /Grup kimliği > < artifactId > yay önyükleme başlangıç testi < / artifactId > < dürbün > Ölçek < /dürbün > < /bağımlılık > < ! - Posta - > < bağımlılık > < Grup kimliği > org.springframework.boot < /Grup kimliği > < artifactId > Spring-boot-starter-mail < / artifactId > < /bağımlılık > < / bağımlılıklar > < inşa etmek > < eklentiler > < Eklenti > < Grup kimliği > org.springframework.boot < /Grup kimliği > < artifactId > Spring-boot-maven-eklentisi < / artifactId > < /Eklenti > < / plugins > < /inşa etmek > < / proje >

Spring boot posta bağımlılığı spring-boot-starter-mail esas olarak burada kullanılır ve bu gerçekten uygundur

Posta yapılandırmasını günlüğe kaydet

mail-appender.xml

< ? xml version = "1.0" encoding = "UTF-8"? > < dahil > < !--E mail ayarları-- > < özellik adı = "smtpHost" value = "smtp.163.com" / > < özellik adı = "smtpPort" value = "25" / > < özellik adı = "mailFrom" value = "xxx@163.com" / > < özellik adı = "kullanıcı adı" değer = "xxx@163.com" / > < özellik adı = "mailTo" value = "xxx@163.com" / > < özellik adı = "şifre" value = "xxx" / > < property name = "SSL" value = "false" / > < property name = "mailSubject" value = "Sistem istisnası" / > < appender name = "MAIL" class = "ch.qos.logback.classic.net.SMTPAppender" > < smtpHost > $ {smtpHost} < / smtpHost > < smtpPort > $ {smtpPort} < / smtpPort > < Kullanıcı adı > $ {kullanıcı adı} < /Kullanıcı adı > < parola > $ {şifre} < /parola > < SSL > $ {SSL} < / SSL > < asynchronousSending > yanlış < / asynchronousSending > < -e > $ {mailTo} < / için > < itibaren > $ {mailFrom} < / dan > < konu > $ {mailSubject} < / konu > < layout class = "ch.qos.logback.classic.html.HTMLLayout" / > < filter class = "ch.qos.logback.classic.filter.ThresholdFilter" > < seviye > HATA < / seviye > < / filtre > < / appender > < /dahil > < özellik adı = "mailFrom" value = "xxx@163.com" / > < özellik adı = "kullanıcı adı" değer = "xxx@163.com" / > < özellik adı = "mailTo" value = "xxx@163.com" / > < özellik adı = "şifre" value = "xxx" / >

Burada kendi e-posta adresinizi yapılandırmanız ve yetkilendirme şifrenizi girmeniz gerekir.

Smtp ayarını açmayı unutmayın

Smtp ayarını açmayı unutmayın

Smtp ayarını açmayı unutmayın

Logback yapılandırması

logback.xml

< ? xml version = "1.0" encoding = "UTF-8"? > < konfigürasyon > < ! - Bazı varsayılan ayarlar - > < include resource = "org / springframework / boot / logging / logback / defaults.xml" / > < ! - Günlük dosyası değişkenleri - > < özellik adı = "LOG_FILE" value = "$ {LOG_FILE: - $ {LOG_PATH: - $ {LOG_TEMP: - $ {java.io.tmpdir: - / tmp}}} / spring.log}" / > < ! - Konsol yapılandırması - > < include resource = "org / springframework / boot / logging / logback / console-appender.xml" / > < ! - Dosya yapılandırması - > < include resource = "org / springframework / boot / logging / logback / file-appender.xml" / > < ! - Posta yapılandırması - > < kaynak = "mail-appender.xml" / dahil > < kök düzeyi = "BİLGİ" > < appender-ref ref = "KONSOL" / > < ek-ref ref = "DOSYA" / > < ek-ref ref = "POSTA" / > < /kök > < / configuration >

Posta yapılandırma dosyasını buraya aktarın ve bir satır ekleyin

Günlük dosyası yapılandırması

application.properties

logging.path = .. / logs logging.file = .. / logs / file.log logging.level.root = bilgi spring.http.encoding.charset = utf-8

Simüle edilmiş istisna

AppController

paket com.itunion.log.mail; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; java.util.Random içe aktarın; @RequestMapping ("/ uygulama") @Filmdenkare public class AppController { private Logger logger = LoggerFactory.getLogger (AppController.class); @RequestMapping public String selectList () { boole bayrağı = new Random (). nextBoolean (); if (bayrak) { yeni RuntimeException ("Sorgu hatası"); } Başka { "Normal dönüş güncel zamanı:" + System.currentTimeMillis (); } } @Hayalhanemersin @Kafadergisi public String exceptionHandler (İstisna e) { logger.error (e.getMessage (), e); return e.getMessage (); } }

Bu, resmi işin anormal tetiklenmesini simüle eder, rastgele bir bool değeri, eğer doğruysa, bir çalışma zamanı istisnası

Genel olarak, istisnalar tek tip olarak ele alınır, logger.error (e.getMessage (), e) kullanmayı unutmayın; ancak sonuç posta ile gönderilmeyecektir

Başla ve test et

Http: // localhost: 8080 / app adresini ziyaret edin

"Sorgu hatası" görüntülemek için sayfaya erişmek için

Anormal e-postanın ekran görüntüsü

gelen kutusu

Orta İtalya Deneyim Turunun ikinci durağı: Umbria'yı Keşfedin
önceki
50 günlük yaşam ve ölüm için geri sayım! Yüz milyonlarca dolar topladıktan sonra, dünyanın en büyük bağımsız müzisyen platformu olan SoundCloud neden öldü?
Sonraki
Wenzhou 1 Nolu Okulu Hua dünyaca ünlü bir okul tarafından kabul edildi! Netizenler şunları söyledi: Ne güzel bir üniversite zorbası!
2017 İkinci Çeyrek Küresel Risk Sermayesi Ekolojik Raporu: İşlem hacmi toparlandı, birleşme ve devralma pazarı kötü durumda
Chengdu emlak piyasası takvimi: Makas açığı daraldı, arz arttı ve 11 proje satıldı
Çok korktum! Amazon'un Güneydoğu Asya pazarına gireceğini duydum, bu yüzden dibe vurduk ve bir göz attık.
Metasequoia kışın kırmızı | Resimli Wuhan
WeChat Mini Programı ve Micro Mall (4): Ürün ayrıntıları sayfasını uygulamak için dinamik API (açık)
Food Expo'nun "Tasarım Galerisi" 90'lı yılların sonrasını "mal taramak" için çekiyor ve ünlü İnternet ürünleri "tarama kodu" satın alınabiliyor
Şampiyonlar Ligi-Cristiano Ronaldo, Şampiyonlar Ligi Real Madrid 2-1 Paris Mane orta çerçeve Liverpool'da arka arkaya 9 maç attı 0-0
Dayanılmaz askeri harcamalar milliyetçiliğin yükselişine ağırlık verdi: Almanya, ABD askeri sistemini yurtdışına "gömebilir" mi?
Bir yıl bekledikten sonra, yüksek teknoloji bölgesinde İnternet ünlü diski nihayet geldi Longquan Shiling suyunun fiyatı 25.000 / 'den satıldı!
Yerli ürünler sektörler arası oynar mı ve genç tüketiciler ödeme yapabilir mi?
Çalı moa'nın tam genomu 700 yıl önce yeniden düzenlendi, gerçek "Jurassic Park" veya fantastik olmayan
To Top