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
5c03adbd
Commit
5c03adbd
authored
Jul 14, 2014
by
zelig
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix logger channel blocking
parent
4d77b7fa
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
43 additions
and
27 deletions
+43
-27
loggers.go
ethlog/loggers.go
+28
-27
loggers_test.go
ethlog/loggers_test.go
+15
-0
No files found.
ethlog/loggers.go
View file @
5c03adbd
...
@@ -39,9 +39,8 @@ func (msg *logMessage) send(logger LogSystem) {
...
@@ -39,9 +39,8 @@ func (msg *logMessage) send(logger LogSystem) {
var
logMessages
chan
(
*
logMessage
)
var
logMessages
chan
(
*
logMessage
)
var
logSystems
[]
LogSystem
var
logSystems
[]
LogSystem
var
quit
chan
bool
var
quit
chan
chan
error
var
drained
chan
bool
var
drained
chan
bool
var
shutdown
chan
bool
var
mutex
=
sync
.
Mutex
{}
var
mutex
=
sync
.
Mutex
{}
type
LogLevel
uint8
type
LogLevel
uint8
...
@@ -55,44 +54,54 @@ const (
...
@@ -55,44 +54,54 @@ const (
DebugDetailLevel
DebugDetailLevel
)
)
func
dispatch
(
msg
*
logMessage
)
{
for
_
,
logSystem
:=
range
logSystems
{
if
logSystem
.
GetLogLevel
()
>=
msg
.
LogLevel
{
msg
.
send
(
logSystem
)
}
}
}
// log messages are dispatched to log writers
// log messages are dispatched to log writers
func
start
()
{
func
start
()
{
out
:
for
{
for
{
select
{
select
{
case
<-
quit
:
case
status
:=
<-
quit
:
break
out
status
<-
nil
return
case
msg
:=
<-
logMessages
:
case
msg
:=
<-
logMessages
:
for
_
,
logSystem
:=
range
logSystems
{
dispatch
(
msg
)
if
logSystem
.
GetLogLevel
()
>=
msg
.
LogLevel
{
default
:
msg
.
send
(
logSystem
)
drained
<-
true
// this blocks until a message is sent to the queue
}
}
}
}
case
drained
<-
true
:
}
func
send
(
msg
*
logMessage
)
{
logMessages
<-
msg
select
{
case
<-
drained
:
default
:
default
:
drained
<-
true
// this blocks until a message is sent to the queu
}
}
}
close
(
shutdown
)
}
}
func
Reset
()
{
func
Reset
()
{
mutex
.
Lock
()
mutex
.
Lock
()
defer
mutex
.
Unlock
()
defer
mutex
.
Unlock
()
if
logSystems
!=
nil
{
if
logSystems
!=
nil
{
quit
<-
true
status
:=
make
(
chan
error
)
quit
<-
status
select
{
select
{
case
<-
drained
:
case
<-
drained
:
default
:
}
}
<-
s
hutdown
<-
s
tatus
}
}
logSystems
=
nil
logSystems
=
nil
}
}
// waits until log messages are drained (dispatched to log writers)
// waits until log messages are drained (dispatched to log writers)
func
Flush
()
{
func
Flush
()
{
mutex
.
Lock
()
defer
mutex
.
Unlock
()
if
logSystems
!=
nil
{
if
logSystems
!=
nil
{
<-
drained
<-
drained
}
}
...
@@ -110,22 +119,14 @@ func AddLogSystem(logSystem LogSystem) {
...
@@ -110,22 +119,14 @@ func AddLogSystem(logSystem LogSystem) {
mutex
.
Lock
()
mutex
.
Lock
()
defer
mutex
.
Unlock
()
defer
mutex
.
Unlock
()
if
logSystems
==
nil
{
if
logSystems
==
nil
{
logMessages
=
make
(
chan
*
logMessage
)
logMessages
=
make
(
chan
*
logMessage
,
5
)
quit
=
make
(
chan
bool
)
quit
=
make
(
chan
chan
error
,
1
)
drained
=
make
(
chan
bool
,
1
)
drained
=
make
(
chan
bool
,
1
)
shutdown
=
make
(
chan
bool
,
1
)
go
start
()
go
start
()
}
}
logSystems
=
append
(
logSystems
,
logSystem
)
logSystems
=
append
(
logSystems
,
logSystem
)
}
}
func
send
(
msg
*
logMessage
)
{
select
{
case
<-
drained
:
}
logMessages
<-
msg
}
func
(
logger
*
Logger
)
sendln
(
level
LogLevel
,
v
...
interface
{})
{
func
(
logger
*
Logger
)
sendln
(
level
LogLevel
,
v
...
interface
{})
{
if
logSystems
!=
nil
{
if
logSystems
!=
nil
{
send
(
newPrintlnLogMessage
(
level
,
logger
.
tag
,
v
...
))
send
(
newPrintlnLogMessage
(
level
,
logger
.
tag
,
v
...
))
...
...
ethlog/loggers_test.go
View file @
5c03adbd
...
@@ -28,6 +28,21 @@ func (t *TestLogSystem) GetLogLevel() LogLevel {
...
@@ -28,6 +28,21 @@ func (t *TestLogSystem) GetLogLevel() LogLevel {
return
t
.
level
return
t
.
level
}
}
func
TestLoggerFlush
(
t
*
testing
.
T
)
{
logger
:=
NewLogger
(
"TEST"
)
testLogSystem
:=
&
TestLogSystem
{
level
:
WarnLevel
}
AddLogSystem
(
testLogSystem
)
for
i
:=
0
;
i
<
5
;
i
++
{
logger
.
Errorf
(
"."
)
}
Flush
()
Reset
()
output
:=
testLogSystem
.
Output
if
output
!=
"[TEST] .[TEST] .[TEST] .[TEST] .[TEST] ."
{
t
.
Error
(
"Expected complete logger output '[TEST] .[TEST] .[TEST] .[TEST] .[TEST] .', got "
,
output
)
}
}
func
TestLoggerPrintln
(
t
*
testing
.
T
)
{
func
TestLoggerPrintln
(
t
*
testing
.
T
)
{
logger
:=
NewLogger
(
"TEST"
)
logger
:=
NewLogger
(
"TEST"
)
testLogSystem
:=
&
TestLogSystem
{
level
:
WarnLevel
}
testLogSystem
:=
&
TestLogSystem
{
level
:
WarnLevel
}
...
...
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