add global log to file
This commit is contained in:
		
							parent
							
								
									5e5b54bab9
								
							
						
					
					
						commit
						a858fa649a
					
				| 
						 | 
				
			
			@ -16,6 +16,7 @@ type NotifyConfig struct {
 | 
			
		|||
		JID      string `toml:"jid"`
 | 
			
		||||
		Password string `toml:"password"`
 | 
			
		||||
	} `toml:"xmpp"`
 | 
			
		||||
	File string `toml:"file"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ReceiveConfig struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package all
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "dev.sum7.eu/genofire/logmania/notify/file"
 | 
			
		||||
	_ "dev.sum7.eu/genofire/logmania/notify/xmpp"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
package xmpp
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
 | 
			
		||||
	"dev.sum7.eu/genofire/logmania/bot"
 | 
			
		||||
	"dev.sum7.eu/genofire/logmania/database"
 | 
			
		||||
	"dev.sum7.eu/genofire/logmania/lib"
 | 
			
		||||
	"dev.sum7.eu/genofire/logmania/notify"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	proto = "file:"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var logger = log.WithField("notify", proto)
 | 
			
		||||
 | 
			
		||||
type Notifier struct {
 | 
			
		||||
	notify.Notifier
 | 
			
		||||
	formatter log.Formatter
 | 
			
		||||
	file      *os.File
 | 
			
		||||
	path      string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Init(config *lib.NotifyConfig, db *database.DB, bot *bot.Bot) notify.Notifier {
 | 
			
		||||
	logger.Info("startup")
 | 
			
		||||
	if config.File == "" {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	file, err := os.OpenFile(config.File, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Errorf("could not open file: %s", err.Error())
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &Notifier{
 | 
			
		||||
		formatter: &log.JSONFormatter{},
 | 
			
		||||
		file:      file,
 | 
			
		||||
		path:      config.File,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n *Notifier) Send(e *log.Entry) error {
 | 
			
		||||
	text, err := n.formatter.Format(e)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	_, err = n.file.Write(text)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Warnf("could not write to logfile: %s - try to reopen it", err.Error())
 | 
			
		||||
		file, err := os.OpenFile(n.path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		n.file = file
 | 
			
		||||
		_, err = n.file.Write(text)
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	notify.AddNotifier(Init)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ type Notifier struct {
 | 
			
		|||
	client    *xmpp_client.Client
 | 
			
		||||
	channels  map[string]bool
 | 
			
		||||
	db        *database.DB
 | 
			
		||||
	formatter *log.TextFormatter
 | 
			
		||||
	formatter log.Formatter
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Init(config *lib.NotifyConfig, db *database.DB, bot *bot.Bot) notify.Notifier {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue