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  }