github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/logging/loggers/multiple_output_logger.go (about) 1 // Copyright Monax Industries Limited 2 // SPDX-License-Identifier: Apache-2.0 3 4 package loggers 5 6 import ( 7 "github.com/go-kit/kit/log" 8 "github.com/hyperledger/burrow/logging/errors" 9 ) 10 11 // This represents an 'AND' type logger. When logged to it will log to each of 12 // the loggers in the slice. 13 type MultipleOutputLogger []log.Logger 14 15 var _ log.Logger = MultipleOutputLogger(nil) 16 17 func (mol MultipleOutputLogger) Log(keyvals ...interface{}) error { 18 var errs []error 19 for _, logger := range mol { 20 err := logger.Log(keyvals...) 21 if err != nil { 22 errs = append(errs, err) 23 } 24 } 25 return errors.CombineErrors(errs) 26 } 27 28 // Creates a logger that forks log messages to each of its outputLoggers 29 func NewMultipleOutputLogger(outputLoggers ...log.Logger) log.Logger { 30 moLogger := make(MultipleOutputLogger, 0, len(outputLoggers)) 31 // Flatten any MultipleOutputLoggers 32 for _, ol := range outputLoggers { 33 if ls, ok := ol.(MultipleOutputLogger); ok { 34 moLogger = append(moLogger, ls...) 35 } else { 36 moLogger = append(moLogger, ol) 37 } 38 } 39 return moLogger 40 }