github.com/Blockdaemon/celo-blockchain@v0.0.0-20200129231733-e667f6b08419/mobile/logger.go (about)

     1  // Copyright 2016 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package geth
    18  
    19  import (
    20  	"github.com/ethereum/go-ethereum/internal/debug"
    21  	"github.com/ethereum/go-ethereum/log"
    22  )
    23  
    24  // SetVerbosity sets the global verbosity level (between 0 and 6 - see logger/verbosity.go).
    25  func SetVerbosity(level int) {
    26  	handler := debug.CreateStreamHandler("term", "split")
    27  	log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(level), handler))
    28  }
    29  
    30  // Note: A call to SetVerbosity after a call to SendLogsToFile will disable file logging.
    31  // That's just how currently the code is structured. It is not an issue since we are going
    32  // to make the calls sequentially at the time of initialization and can choose a particular
    33  // order.
    34  // Logs will be sent to this file along with the logcat.
    35  // format has to be term or json. Anything else will cause the app to panic.
    36  func SendLogsToFile(filename string, level int, format string) bool {
    37  	var consoleFormat log.Format
    38  	if format == "term" {
    39  		consoleFormat = log.TerminalFormat(false)
    40  	} else if format == "json" {
    41  		consoleFormat = log.JSONFormat()
    42  	} else {
    43  		panic("Unexpected format: " + format)
    44  	}
    45  	currentHandler := log.Root().GetHandler()
    46  	fileHandler, err := log.FileHandler(filename, consoleFormat)
    47  	levelFilterFileHandler := log.LvlFilterHandler(log.Lvl(level), fileHandler)
    48  	if err != nil {
    49  		log.Error("SendLogsToFile/Failed to open file " + filename + " for logging")
    50  		return false
    51  	} else {
    52  		if currentHandler == nil {
    53  			log.Root().SetHandler(levelFilterFileHandler)
    54  		} else {
    55  			multiHandler := log.MultiHandler(currentHandler, levelFilterFileHandler)
    56  			log.Root().SetHandler(multiHandler)
    57  		}
    58  		return true
    59  	}
    60  }