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  }