github.com/astaxie/beego@v1.12.3/logs/slack.go (about) 1 package logs 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 "net/url" 8 "time" 9 ) 10 11 // SLACKWriter implements beego LoggerInterface and is used to send jiaoliao webhook 12 type SLACKWriter struct { 13 WebhookURL string `json:"webhookurl"` 14 Level int `json:"level"` 15 } 16 17 // newSLACKWriter create jiaoliao writer. 18 func newSLACKWriter() Logger { 19 return &SLACKWriter{Level: LevelTrace} 20 } 21 22 // Init SLACKWriter with json config string 23 func (s *SLACKWriter) Init(jsonconfig string) error { 24 return json.Unmarshal([]byte(jsonconfig), s) 25 } 26 27 // WriteMsg write message in smtp writer. 28 // it will send an email with subject and only this message. 29 func (s *SLACKWriter) WriteMsg(when time.Time, msg string, level int) error { 30 if level > s.Level { 31 return nil 32 } 33 34 text := fmt.Sprintf("{\"text\": \"%s %s\"}", when.Format("2006-01-02 15:04:05"), msg) 35 36 form := url.Values{} 37 form.Add("payload", text) 38 39 resp, err := http.PostForm(s.WebhookURL, form) 40 if err != nil { 41 return err 42 } 43 defer resp.Body.Close() 44 if resp.StatusCode != http.StatusOK { 45 return fmt.Errorf("Post webhook failed %s %d", resp.Status, resp.StatusCode) 46 } 47 return nil 48 } 49 50 // Flush implementing method. empty. 51 func (s *SLACKWriter) Flush() { 52 } 53 54 // Destroy implementing method. empty. 55 func (s *SLACKWriter) Destroy() { 56 } 57 58 func init() { 59 Register(AdapterSlack, newSLACKWriter) 60 }