github.com/vlifesystems/rulehunter@v0.0.0-20180501090014-673078aa4a83/logger/logger.go (about) 1 // Copyright (C) 2016-2017 vLife Systems Ltd <http://vlifesystems.com> 2 // Licensed under an MIT licence. Please see LICENSE.md for details. 3 4 package logger 5 6 import ( 7 "github.com/kardianos/service" 8 "github.com/vlifesystems/rulehunter/quitter" 9 ) 10 11 type Logger interface { 12 Run(*quitter.Quitter) 13 Running() bool 14 Info(string) 15 Error(error) error 16 SetSvcLogger(service.Logger) 17 } 18 19 type SvcLogger struct { 20 svcLogger service.Logger 21 isRunning bool 22 } 23 24 func NewSvcLogger() *SvcLogger { 25 return &SvcLogger{ 26 svcLogger: nil, 27 isRunning: false, 28 } 29 } 30 31 func (l *SvcLogger) Run(quit *quitter.Quitter) { 32 if l.svcLogger == nil { 33 panic("service logger not set") 34 } 35 quit.Add() 36 defer quit.Done() 37 l.isRunning = true 38 defer func() { l.isRunning = false }() 39 for { 40 select { 41 case <-quit.C: 42 return 43 } 44 } 45 } 46 47 // Running returns whether Logger is running 48 func (l *SvcLogger) Running() bool { 49 return l.isRunning 50 } 51 52 func (l *SvcLogger) SetSvcLogger(logger service.Logger) { 53 l.svcLogger = logger 54 } 55 56 // Error logs an error and returns the same error 57 func (l *SvcLogger) Error(err error) error { 58 l.svcLogger.Error(err.Error()) 59 return err 60 } 61 62 func (l *SvcLogger) Info(msg string) { 63 l.svcLogger.Info(msg) 64 }