Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
8b1b9fc9
Commit
8b1b9fc9
authored
Mar 22, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'jsonlog' of
https://github.com/ethersphere/go-ethereum
into ethersphere-jsonlog
Conflicts: eth/backend.go
parents
8ed4f226
0edb3356
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
105 additions
and
110 deletions
+105
-110
logger.go
blockpool/test/logger.go
+6
-12
main.go
cmd/ethereum/main.go
+1
-1
flags.go
cmd/utils/flags.go
+5
-5
backend.go
eth/backend.go
+21
-17
log.go
logger/log.go
+16
-8
loggers.go
logger/loggers.go
+3
-4
loggers_test.go
logger/loggers_test.go
+6
-4
logsystem.go
logger/logsystem.go
+17
-44
sys.go
logger/sys.go
+30
-15
No files found.
blockpool/test/logger.go
View file @
8b1b9fc9
...
...
@@ -21,8 +21,7 @@ func TestFunc(t *testing.T) {
*/
func
LogInit
()
{
once
.
Do
(
func
()
{
var
logsys
=
logger
.
NewStdLogSystem
(
os
.
Stdout
,
log
.
LstdFlags
,
logger
.
LogLevel
(
logger
.
WarnLevel
))
logger
.
AddLogSystem
(
logsys
)
logger
.
NewStdLogSystem
(
os
.
Stdout
,
log
.
LstdFlags
,
logger
.
LogLevel
(
logger
.
DebugDetailLevel
))
})
}
...
...
@@ -41,11 +40,8 @@ func Testlog(t *testing.T) testLogger {
return
l
}
func
(
testLogger
)
GetLogLevel
()
logger
.
LogLevel
{
return
logger
.
DebugLevel
}
func
(
testLogger
)
SetLogLevel
(
logger
.
LogLevel
)
{}
func
(
l
testLogger
)
LogPrint
(
level
logger
.
LogLevel
,
msg
string
)
{
l
.
t
.
Logf
(
"%s"
,
msg
)
func
(
l
testLogger
)
LogPrint
(
msg
logger
.
LogMsg
)
{
l
.
t
.
Log
(
msg
.
String
())
}
func
(
testLogger
)
Detach
()
{
...
...
@@ -68,12 +64,10 @@ func Benchlog(b *testing.B) benchLogger {
return
l
}
func
(
benchLogger
)
GetLogLevel
()
logger
.
LogLevel
{
return
logger
.
Silence
}
func
(
benchLogger
)
SetLogLevel
(
logger
.
LogLevel
)
{}
func
(
l
benchLogger
)
LogPrint
(
level
logger
.
LogLevel
,
msg
string
)
{
l
.
b
.
Logf
(
"%s"
,
msg
)
func
(
l
benchLogger
)
LogPrint
(
msg
logger
.
LogMsg
)
{
l
.
b
.
Log
(
msg
.
String
())
}
func
(
benchLogger
)
Detach
()
{
logger
.
Flush
()
logger
.
Reset
()
...
...
cmd/ethereum/main.go
View file @
8b1b9fc9
...
...
@@ -135,7 +135,7 @@ The Ethereum JavaScript VM exposes a node admin interface as well as the DAPP Ja
utils
.
JSpathFlag
,
utils
.
ListenPortFlag
,
utils
.
LogFileFlag
,
utils
.
Log
Format
Flag
,
utils
.
Log
JSON
Flag
,
utils
.
LogLevelFlag
,
utils
.
MaxPeersFlag
,
utils
.
MinerThreadsFlag
,
...
...
cmd/utils/flags.go
View file @
8b1b9fc9
...
...
@@ -117,10 +117,10 @@ var (
Usage
:
"0-5 (silent, error, warn, info, debug, debug detail)"
,
Value
:
int
(
logger
.
InfoLevel
),
}
Log
Format
Flag
=
cli
.
StringFlag
{
Name
:
"log
format
"
,
Usage
:
`"std" or "raw"`
,
Value
:
"
std
"
,
Log
JSON
Flag
=
cli
.
StringFlag
{
Name
:
"log
json
"
,
Usage
:
"Send json structured log output to a file or '-' for standard output (default: no json output)"
,
Value
:
""
,
}
VMDebugFlag
=
cli
.
BoolFlag
{
Name
:
"vmdebug"
,
...
...
@@ -213,7 +213,7 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
NetworkId
:
ctx
.
GlobalInt
(
NetworkIdFlag
.
Name
),
LogFile
:
ctx
.
GlobalString
(
LogFileFlag
.
Name
),
LogLevel
:
ctx
.
GlobalInt
(
LogLevelFlag
.
Name
),
Log
Format
:
ctx
.
GlobalString
(
LogFormat
Flag
.
Name
),
Log
JSON
:
ctx
.
GlobalString
(
LogJSON
Flag
.
Name
),
MinerThreads
:
ctx
.
GlobalInt
(
MinerThreadsFlag
.
Name
),
AccountManager
:
GetAccountManager
(
ctx
),
VmDebug
:
ctx
.
GlobalBool
(
VMDebugFlag
.
Name
),
...
...
eth/backend.go
View file @
8b1b9fc9
...
...
@@ -45,7 +45,7 @@ type Config struct {
DataDir
string
LogFile
string
LogLevel
int
Log
Format
string
Log
JSON
string
VmDebug
bool
MaxPeers
int
...
...
@@ -136,7 +136,7 @@ type Ethereum struct {
blockSub
event
.
Subscription
miner
*
miner
.
Miner
logger
logger
.
LogSystem
//
logger logger.LogSystem
Mining
bool
DataDir
string
...
...
@@ -147,7 +147,10 @@ type Ethereum struct {
func
New
(
config
*
Config
)
(
*
Ethereum
,
error
)
{
// Boostrap database
servlogsystem
:=
logger
.
New
(
config
.
DataDir
,
config
.
LogFile
,
config
.
LogLevel
,
config
.
LogFormat
)
logger
.
New
(
config
.
DataDir
,
config
.
LogFile
,
config
.
LogLevel
)
if
len
(
config
.
LogJSON
)
>
0
{
logger
.
NewJSONsystem
(
config
.
DataDir
,
config
.
LogJSON
)
}
newdb
:=
config
.
NewDB
if
newdb
==
nil
{
...
...
@@ -179,7 +182,7 @@ func New(config *Config) (*Ethereum, error) {
stateDb
:
stateDb
,
extraDb
:
extraDb
,
eventMux
:
&
event
.
TypeMux
{},
logger
:
servlogsystem
,
//
logger: servlogsystem,
accountManager
:
config
.
AccountManager
,
DataDir
:
config
.
DataDir
,
version
:
config
.
Name
,
// TODO should separate from Name
...
...
@@ -303,7 +306,8 @@ func (s *Ethereum) StartMining() error {
func
(
s
*
Ethereum
)
StopMining
()
{
s
.
miner
.
Stop
()
}
func
(
s
*
Ethereum
)
IsMining
()
bool
{
return
s
.
miner
.
Mining
()
}
func
(
s
*
Ethereum
)
Miner
()
*
miner
.
Miner
{
return
s
.
miner
}
func
(
s
*
Ethereum
)
Logger
()
logger
.
LogSystem
{
return
s
.
logger
}
// func (s *Ethereum) Logger() logger.LogSystem { return s.logger }
func
(
s
*
Ethereum
)
Name
()
string
{
return
s
.
net
.
Name
}
func
(
s
*
Ethereum
)
AccountManager
()
*
accounts
.
Manager
{
return
s
.
accountManager
}
func
(
s
*
Ethereum
)
ChainManager
()
*
core
.
ChainManager
{
return
s
.
chainManager
}
...
...
logger/log.go
View file @
8b1b9fc9
...
...
@@ -18,7 +18,7 @@ func openLogFile(datadir string, filename string) *os.File {
return
file
}
func
New
(
datadir
string
,
logFile
string
,
logLevel
int
,
logFormat
string
)
LogSystem
{
func
New
(
datadir
string
,
logFile
string
,
logLevel
int
)
LogSystem
{
var
writer
io
.
Writer
if
logFile
==
""
{
writer
=
os
.
Stdout
...
...
@@ -27,14 +27,22 @@ func New(datadir string, logFile string, logLevel int, logFormat string) LogSyst
}
var
sys
LogSystem
switch
logFormat
{
case
"raw"
:
sys
=
NewRawLogSystem
(
writer
,
0
,
LogLevel
(
logLevel
))
case
"json"
:
sys
=
NewJsonLogSystem
(
writer
,
0
,
LogLevel
(
logLevel
))
default
:
sys
=
NewStdLogSystem
(
writer
,
log
.
LstdFlags
,
LogLevel
(
logLevel
))
AddLogSystem
(
sys
)
return
sys
}
func
NewJSONsystem
(
datadir
string
,
logFile
string
)
LogSystem
{
var
writer
io
.
Writer
if
logFile
==
"-"
{
writer
=
os
.
Stdout
}
else
{
writer
=
openLogFile
(
datadir
,
logFile
)
}
var
sys
LogSystem
sys
=
NewJsonLogSystem
(
writer
)
AddLogSystem
(
sys
)
return
sys
...
...
logger/loggers.go
View file @
8b1b9fc9
...
...
@@ -28,7 +28,6 @@ const (
InfoLevel
DebugLevel
DebugDetailLevel
JsonLevel
=
1000
)
// A Logger prints messages prefixed by a given tag. It provides named
...
...
@@ -43,11 +42,11 @@ func NewLogger(tag string) *Logger {
}
func
(
logger
*
Logger
)
Sendln
(
level
LogLevel
,
v
...
interface
{})
{
logMessageC
<-
message
{
level
,
logger
.
tag
+
fmt
.
Sprintln
(
v
...
)}
logMessageC
<-
stdMsg
{
level
,
logger
.
tag
+
fmt
.
Sprintln
(
v
...
)}
}
func
(
logger
*
Logger
)
Sendf
(
level
LogLevel
,
format
string
,
v
...
interface
{})
{
logMessageC
<-
message
{
level
,
logger
.
tag
+
fmt
.
Sprintf
(
format
,
v
...
)}
logMessageC
<-
stdMsg
{
level
,
logger
.
tag
+
fmt
.
Sprintf
(
format
,
v
...
)}
}
// Errorln writes a message with ErrorLevel.
...
...
@@ -129,6 +128,6 @@ func (logger *JsonLogger) LogJson(v JsonLog) {
}
jsontxt
,
_
:=
json
.
Marshal
(
obj
)
logMessageC
<-
message
{
JsonLevel
,
string
(
jsontxt
)}
logMessageC
<-
(
jsonMsg
(
jsontxt
))
}
logger/loggers_test.go
View file @
8b1b9fc9
...
...
@@ -15,9 +15,11 @@ type TestLogSystem struct {
level
LogLevel
}
func
(
ls
*
TestLogSystem
)
LogPrint
(
level
LogLevel
,
msg
strin
g
)
{
func
(
ls
*
TestLogSystem
)
LogPrint
(
msg
LogMs
g
)
{
ls
.
mutex
.
Lock
()
ls
.
output
+=
msg
if
ls
.
level
>=
msg
.
Level
()
{
ls
.
output
+=
msg
.
String
()
}
ls
.
mutex
.
Unlock
()
}
...
...
@@ -47,9 +49,9 @@ type blockedLogSystem struct {
unblock
chan
struct
{}
}
func
(
ls
blockedLogSystem
)
LogPrint
(
level
LogLevel
,
msg
strin
g
)
{
func
(
ls
blockedLogSystem
)
LogPrint
(
msg
LogMs
g
)
{
<-
ls
.
unblock
ls
.
LogSystem
.
LogPrint
(
level
,
msg
)
ls
.
LogSystem
.
LogPrint
(
msg
)
}
func
TestLoggerFlush
(
t
*
testing
.
T
)
{
...
...
logger/logsystem.go
View file @
8b1b9fc9
...
...
@@ -9,9 +9,7 @@ import (
// LogSystem is implemented by log output devices.
// All methods can be called concurrently from multiple goroutines.
type
LogSystem
interface
{
GetLogLevel
()
LogLevel
SetLogLevel
(
i
LogLevel
)
LogPrint
(
LogLevel
,
string
)
LogPrint
(
LogMsg
)
}
// NewStdLogSystem creates a LogSystem that prints to the given writer.
...
...
@@ -26,8 +24,13 @@ type stdLogSystem struct {
level
uint32
}
func
(
t
*
stdLogSystem
)
LogPrint
(
level
LogLevel
,
msg
string
)
{
t
.
logger
.
Print
(
msg
)
func
(
t
*
stdLogSystem
)
LogPrint
(
msg
LogMsg
)
{
stdmsg
,
ok
:=
msg
.
(
stdMsg
)
if
ok
{
if
t
.
GetLogLevel
()
>=
stdmsg
.
Level
()
{
t
.
logger
.
Print
(
stdmsg
.
String
())
}
}
}
func
(
t
*
stdLogSystem
)
SetLogLevel
(
i
LogLevel
)
{
...
...
@@ -38,50 +41,20 @@ func (t *stdLogSystem) GetLogLevel() LogLevel {
return
LogLevel
(
atomic
.
LoadUint32
(
&
t
.
level
))
}
// New
Raw
LogSystem creates a LogSystem that prints to the given writer without
// adding extra information
. Suitable for preformatted output
func
New
RawLogSystem
(
writer
io
.
Writer
,
flags
int
,
level
LogLevel
)
LogSystem
{
// New
JSON
LogSystem creates a LogSystem that prints to the given writer without
// adding extra information
irrespective of loglevel only if message is JSON type
func
New
JsonLogSystem
(
writer
io
.
Writer
)
LogSystem
{
logger
:=
log
.
New
(
writer
,
""
,
0
)
return
&
rawLogSystem
{
logger
,
uint32
(
level
)}
}
type
rawLogSystem
struct
{
logger
*
log
.
Logger
level
uint32
}
func
(
t
*
rawLogSystem
)
LogPrint
(
level
LogLevel
,
msg
string
)
{
t
.
logger
.
Print
(
msg
)
}
func
(
t
*
rawLogSystem
)
SetLogLevel
(
i
LogLevel
)
{
atomic
.
StoreUint32
(
&
t
.
level
,
uint32
(
i
))
}
func
(
t
*
rawLogSystem
)
GetLogLevel
()
LogLevel
{
return
LogLevel
(
atomic
.
LoadUint32
(
&
t
.
level
))
}
// NewRawLogSystem creates a LogSystem that prints to the given writer without
// adding extra information. Suitable for preformatted output
func
NewJsonLogSystem
(
writer
io
.
Writer
,
flags
int
,
level
LogLevel
)
LogSystem
{
logger
:=
log
.
New
(
writer
,
""
,
0
)
return
&
jsonLogSystem
{
logger
,
uint32
(
level
)}
return
&
jsonLogSystem
{
logger
}
}
type
jsonLogSystem
struct
{
logger
*
log
.
Logger
level
uint32
}
func
(
t
*
jsonLogSystem
)
LogPrint
(
level
LogLevel
,
msg
string
)
{
t
.
logger
.
Print
(
msg
)
}
func
(
t
*
jsonLogSystem
)
SetLogLevel
(
i
LogLevel
)
{
atomic
.
StoreUint32
(
&
t
.
level
,
uint32
(
i
))
}
func
(
t
*
jsonLogSystem
)
GetLogLevel
()
LogLevel
{
return
LogLevel
(
atomic
.
LoadUint32
(
&
t
.
level
))
func
(
t
*
jsonLogSystem
)
LogPrint
(
msg
LogMsg
)
{
jsonmsg
,
ok
:=
msg
.
(
jsonMsg
)
if
ok
{
t
.
logger
.
Print
(
jsonmsg
.
String
())
}
}
logger/sys.go
View file @
8b1b9fc9
package
logger
import
(
"fmt"
"sync"
)
type
message
struct
{
type
stdMsg
struct
{
level
LogLevel
msg
string
}
type
jsonMsg
[]
byte
func
(
m
jsonMsg
)
Level
()
LogLevel
{
return
0
}
func
(
m
jsonMsg
)
String
()
string
{
return
string
(
m
)
}
type
LogMsg
interface
{
Level
()
LogLevel
fmt
.
Stringer
}
func
(
m
stdMsg
)
Level
()
LogLevel
{
return
m
.
level
}
func
(
m
stdMsg
)
String
()
string
{
return
m
.
msg
}
var
(
logMessageC
=
make
(
chan
message
)
logMessageC
=
make
(
chan
LogMsg
)
addSystemC
=
make
(
chan
LogSystem
)
flushC
=
make
(
chan
chan
struct
{})
resetC
=
make
(
chan
chan
struct
{})
...
...
@@ -27,11 +51,11 @@ const sysBufferSize = 500
func
dispatchLoop
()
{
var
(
systems
[]
LogSystem
systemIn
[]
chan
message
systemIn
[]
chan
LogMsg
systemWG
sync
.
WaitGroup
)
bootSystem
:=
func
(
sys
LogSystem
)
{
in
:=
make
(
chan
message
,
sysBufferSize
)
in
:=
make
(
chan
LogMsg
,
sysBufferSize
)
systemIn
=
append
(
systemIn
,
in
)
systemWG
.
Add
(
1
)
go
sysLoop
(
sys
,
in
,
&
systemWG
)
...
...
@@ -73,18 +97,9 @@ func dispatchLoop() {
}
}
func
sysLoop
(
sys
LogSystem
,
in
<-
chan
message
,
wg
*
sync
.
WaitGroup
)
{
func
sysLoop
(
sys
LogSystem
,
in
<-
chan
LogMsg
,
wg
*
sync
.
WaitGroup
)
{
for
msg
:=
range
in
{
switch
sys
.
(
type
)
{
case
*
jsonLogSystem
:
if
msg
.
level
==
JsonLevel
{
sys
.
LogPrint
(
msg
.
level
,
msg
.
msg
)
}
default
:
if
sys
.
GetLogLevel
()
>=
msg
.
level
{
sys
.
LogPrint
(
msg
.
level
,
msg
.
msg
)
}
}
sys
.
LogPrint
(
msg
)
}
wg
.
Done
()
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment