aboutsummaryrefslogblamecommitdiffstats
path: root/ethlog/README.md
blob: d9b69e1066b49cbfad327e9fd73245a236cae250 (plain) (tree)
1
2
3
4
5
6
7
8
9







                                                                                                      
                                                                                                            









                                              

                                                                        
                                                        
                                                                         






































                                                                                                        
## Features

- packages use tagged logger sending log messages to shared (process-wide) logging engine
- log writers (interface ethlog.LogSystem) can be added to the logging engine by wrappers/guis/clients
- shared logging engine dispatching to multiple log systems
- log level can be set separately per log system
- async logging thread: logging IO does not block main thread 
- log messages are synchronously stringified to avoid incorrectly logging of changed states 
- log level enum: ethlog.LogLevel:   Silence, ErrorLevel, WarnLevel, InfoLevel, DebugLevel, DebugDetailLevel

## Usage

In an ethereum component package:

    import "github.com/ethereum/eth-go/ethlog"

    // package-wide logger using tag
    var logger = ethlog.NewLogger("TAG")

Logger provides named Printf and Println style methods for all loglevels

    logger.Infoln("this is info") # > [TAG] This is info
    logger.Infof("this %v is info", object) # > [TAG] This object is info

Ethereum wrappers should register log systems conforming to ethlog.LogSystem

    import "github.com/ethereum/eth-go/ethlog"
    
    type CustomLogWriter struct {
      logLevel ethlog.LogLevel
    }

    func (t *TestLogSystem) SetLogLevel(i LogLevel) {
      t.level = i
    }

    func (t *TestLogSystem) GetLogLevel() LogLevel {
      return t.level
    }

    func (c *CustomLogWriter) Printf(format string, v...interface{}) {
      //....
    }

    func (c *CustomLogWriter) Println(v...interface{}) {
      //....
    }

    ethlog.AddLogWriter(&CustomLogWriter{})

ethlog also provides constructors for that wrap io.Writers into a standard logger with a settable level:

    filename := "test.log"
    file, _ := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, os.ModePerm)
    fileLogSystem := NewStdLogSystem(file, 0, WarnLevel)
    AddLogSystem(fileLogSystem)
    stdOutLogSystem := NewStdLogSystem(os.Stdout, 0, WarnLevel)
    AddLogSystem(stdOutLogSystem)