mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-12 05:14:14 +00:00
Nimbus: runtime log level selection and logfile option
This commit is contained in:
parent
efadc8d2a9
commit
50504cf553
@ -36,5 +36,5 @@ task test, "Run tests":
|
|||||||
test "test_rpc"
|
test "test_rpc"
|
||||||
|
|
||||||
task nimbus, "Build Nimbus":
|
task nimbus, "Build Nimbus":
|
||||||
buildBinary "nimbus", "nimbus/"
|
buildBinary "nimbus", "nimbus/", "-d:chronicles_log_level=TRACE"
|
||||||
|
|
||||||
|
@ -136,6 +136,8 @@ type
|
|||||||
DebugConfiguration* = object
|
DebugConfiguration* = object
|
||||||
## Debug configuration object
|
## Debug configuration object
|
||||||
flags*: set[DebugFlags] ## Debug flags
|
flags*: set[DebugFlags] ## Debug flags
|
||||||
|
logLevel*: LogLevel ## Log level
|
||||||
|
logFile*: string ## Log file
|
||||||
|
|
||||||
PruneMode* {.pure.} = enum
|
PruneMode* {.pure.} = enum
|
||||||
Full
|
Full
|
||||||
@ -168,6 +170,7 @@ type
|
|||||||
|
|
||||||
const
|
const
|
||||||
defaultRpcApi = {RpcFlags.Eth, RpcFlags.Shh}
|
defaultRpcApi = {RpcFlags.Eth, RpcFlags.Shh}
|
||||||
|
defaultLogLevel = LogLevel.WARN
|
||||||
|
|
||||||
var nimbusConfig {.threadvar.}: NimbusConfiguration
|
var nimbusConfig {.threadvar.}: NimbusConfiguration
|
||||||
|
|
||||||
@ -491,25 +494,38 @@ proc processDebugArguments(key, value: string): ConfigStatus =
|
|||||||
config.debug.flags.incl(DebugFlags.Test2)
|
config.debug.flags.incl(DebugFlags.Test2)
|
||||||
elif item == "test3":
|
elif item == "test3":
|
||||||
config.debug.flags.incl(DebugFlags.Test3)
|
config.debug.flags.incl(DebugFlags.Test3)
|
||||||
|
elif skey == "log-level":
|
||||||
|
try:
|
||||||
|
let logLevel = parseEnum[LogLevel](value)
|
||||||
|
if logLevel >= enabledLogLevel:
|
||||||
|
config.debug.logLevel = logLevel
|
||||||
else:
|
else:
|
||||||
result = EmptyOption
|
result = ErrorIncorrectOption
|
||||||
|
except ValueError:
|
||||||
|
result = ErrorIncorrectOption
|
||||||
|
elif skey == "log-file":
|
||||||
|
if len(value) == 0:
|
||||||
|
result = ErrorIncorrectOption
|
||||||
|
else:
|
||||||
|
config.debug.logFile = value
|
||||||
|
|
||||||
proc dumpConfiguration*(): string =
|
proc dumpConfiguration*(): string =
|
||||||
## Dumps current configuration as string
|
## Dumps current configuration as string
|
||||||
let config = getConfiguration()
|
let config = getConfiguration()
|
||||||
result = repr config
|
result = repr config
|
||||||
|
|
||||||
template checkArgument(a, b, c, e: untyped) =
|
template processArgument(processor, key, value, msg: untyped) =
|
||||||
## Checks if arguments got processed successfully
|
## Checks if arguments got processed successfully
|
||||||
var res = (a)(string((b)), string((c)))
|
var res = processor(string(key), string(value))
|
||||||
if res == Success:
|
if res == Success:
|
||||||
|
result = res
|
||||||
continue
|
continue
|
||||||
elif res == ErrorParseOption:
|
elif res == ErrorParseOption:
|
||||||
(e) = "Error processing option [" & key & "] with value [" & value & "]"
|
msg = "Error processing option '" & key & "' with value '" & value & "'."
|
||||||
result = res
|
result = res
|
||||||
break
|
break
|
||||||
elif res == ErrorIncorrectOption:
|
elif res == ErrorIncorrectOption:
|
||||||
(e) = "Incorrect value for option [" & key & "] value [" & value & "]"
|
msg = "Incorrect value for option '" & key & "': '" & value & "'."
|
||||||
result = res
|
result = res
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -543,6 +559,7 @@ proc initConfiguration(): NimbusConfiguration =
|
|||||||
|
|
||||||
## Debug defaults
|
## Debug defaults
|
||||||
result.debug.flags = {}
|
result.debug.flags = {}
|
||||||
|
result.debug.logLevel = defaultLogLevel
|
||||||
|
|
||||||
proc getConfiguration*(): NimbusConfiguration =
|
proc getConfiguration*(): NimbusConfiguration =
|
||||||
## Retreive current configuration object `NimbusConfiguration`.
|
## Retreive current configuration object `NimbusConfiguration`.
|
||||||
@ -551,6 +568,12 @@ proc getConfiguration*(): NimbusConfiguration =
|
|||||||
result = nimbusConfig
|
result = nimbusConfig
|
||||||
|
|
||||||
proc getHelpString*(): string =
|
proc getHelpString*(): string =
|
||||||
|
var logLevels: seq[string]
|
||||||
|
for level in LogLevel:
|
||||||
|
if level < enabledLogLevel:
|
||||||
|
continue
|
||||||
|
logLevels.add($level)
|
||||||
|
|
||||||
result = """
|
result = """
|
||||||
|
|
||||||
USAGE:
|
USAGE:
|
||||||
@ -586,10 +609,14 @@ API AND CONSOLE OPTIONS:
|
|||||||
--rpcapi:<value> Enable specific set of rpc api from comma separated list(eth, shh, debug)
|
--rpcapi:<value> Enable specific set of rpc api from comma separated list(eth, shh, debug)
|
||||||
|
|
||||||
LOGGING AND DEBUGGING OPTIONS:
|
LOGGING AND DEBUGGING OPTIONS:
|
||||||
|
--log-level:<value> One of: $2 (default: $3)
|
||||||
|
--log-file:<value> Optional log file, replacing stdout
|
||||||
--debug Enable debug mode
|
--debug Enable debug mode
|
||||||
--test:<value> Perform specified test
|
--test:<value> Perform specified test
|
||||||
""" % [
|
""" % [
|
||||||
NimbusIdent
|
NimbusIdent,
|
||||||
|
join(logLevels, ", "),
|
||||||
|
$defaultLogLevel
|
||||||
]
|
]
|
||||||
|
|
||||||
proc processArguments*(msg: var string): ConfigStatus =
|
proc processArguments*(msg: var string): ConfigStatus =
|
||||||
@ -612,6 +639,7 @@ proc processArguments*(msg: var string): ConfigStatus =
|
|||||||
var opt = initOptParser()
|
var opt = initOptParser()
|
||||||
var length = 0
|
var length = 0
|
||||||
for kind, key, value in opt.getopt():
|
for kind, key, value in opt.getopt():
|
||||||
|
result = Error
|
||||||
case kind
|
case kind
|
||||||
of cmdArgument:
|
of cmdArgument:
|
||||||
discard
|
discard
|
||||||
@ -627,12 +655,14 @@ proc processArguments*(msg: var string): ConfigStatus =
|
|||||||
result = Success
|
result = Success
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
checkArgument processEthArguments, key, value, msg
|
processArgument processEthArguments, key, value, msg
|
||||||
checkArgument processRpcArguments, key, value, msg
|
processArgument processRpcArguments, key, value, msg
|
||||||
checkArgument processNetArguments, key, value, msg
|
processArgument processNetArguments, key, value, msg
|
||||||
checkArgument processDebugArguments, key, value, msg
|
processArgument processDebugArguments, key, value, msg
|
||||||
|
if result != Success:
|
||||||
|
msg = "Unknown option: '" & key & "'."
|
||||||
of cmdEnd:
|
of cmdEnd:
|
||||||
doAssert(false)
|
doAssert(false) # we're never getting this kind here
|
||||||
|
|
||||||
if config.net.bootNodes.len == 0:
|
if config.net.bootNodes.len == 0:
|
||||||
# No custom bootnodes were specified on the command line, restore to
|
# No custom bootnodes were specified on the command line, restore to
|
||||||
@ -642,6 +672,7 @@ proc processArguments*(msg: var string): ConfigStatus =
|
|||||||
if config.net.discPort == 0:
|
if config.net.discPort == 0:
|
||||||
config.net.discPort = config.net.bindPort
|
config.net.discPort = config.net.bindPort
|
||||||
|
|
||||||
proc processConfig*(pathname: string): ConfigStatus =
|
proc processConfiguration*(pathname: string): ConfigStatus =
|
||||||
## Process configuration file `pathname` and update `NimbusConfiguration`.
|
## Process configuration file `pathname` and update `NimbusConfiguration`.
|
||||||
result = Success
|
result = Success
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
-d:chronicles_line_numbers
|
-d:chronicles_line_numbers
|
||||||
-d:"chronicles_sinks=textblocks"
|
-d:"chronicles_sinks=textblocks[file]"
|
||||||
|
-d:"chronicles_runtime_filtering=on"
|
||||||
# https://github.com/nim-lang/Nim/issues/8294#issuecomment-454556051
|
# https://github.com/nim-lang/Nim/issues/8294#issuecomment-454556051
|
||||||
@if windows:
|
@if windows:
|
||||||
-d:"chronicles_colors=NoColors"
|
-d:"chronicles_colors=NoColors"
|
||||||
|
@ -40,6 +40,12 @@ proc start(): NimbusObject =
|
|||||||
var nimbus = NimbusObject()
|
var nimbus = NimbusObject()
|
||||||
var conf = getConfiguration()
|
var conf = getConfiguration()
|
||||||
|
|
||||||
|
setLogLevel(conf.debug.logLevel)
|
||||||
|
if len(conf.debug.logFile) != 0:
|
||||||
|
discard defaultChroniclesStream.output.open(conf.debug.logFile, fmAppend)
|
||||||
|
else:
|
||||||
|
discard defaultChroniclesStream.output.open(stdout)
|
||||||
|
|
||||||
## Creating RPC Server
|
## Creating RPC Server
|
||||||
if RpcFlags.Enabled in conf.rpc.flags:
|
if RpcFlags.Enabled in conf.rpc.flags:
|
||||||
nimbus.rpcServer = newRpcHttpServer(conf.rpc.binds)
|
nimbus.rpcServer = newRpcHttpServer(conf.rpc.binds)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user