Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-log
Commits
ea955b1a
Commit
ea955b1a
authored
Jun 22, 2020
by
lanzafame
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
enable configuring several log outputs
parent
f8d20c39
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
131 additions
and
0 deletions
+131
-0
setup.go
setup.go
+46
-0
setup_test.go
setup_test.go
+85
-0
No files found.
setup.go
View file @
ea955b1a
...
...
@@ -29,6 +29,7 @@ const (
envLoggingFmt
=
"GOLOG_LOG_FMT"
envLoggingFile
=
"GOLOG_FILE"
// /path/to/file
envLoggingOutput
=
"GOLOG_OUTPUT"
// possible values: stdout|stderr|file combine multiple values with '+'
)
type
LogFormat
int
...
...
@@ -263,5 +264,50 @@ func configFromEnv() Config {
cfg
.
Stderr
=
false
}
output
:=
os
.
Getenv
(
envLoggingOutput
)
//TODO: fix lanzafame's super lazy impl...
switch
output
{
case
"stdout"
:
cfg
.
Stdout
=
true
cfg
.
Stderr
=
false
cfg
.
File
=
""
case
"stderr"
:
cfg
.
Stderr
=
true
cfg
.
Stdout
=
false
cfg
.
File
=
""
case
"file"
:
cfg
.
File
=
os
.
Getenv
(
envLoggingFile
)
if
cfg
.
File
!=
""
{
fmt
.
Fprint
(
os
.
Stderr
,
"please specify a GOLOG_FILE value to write to"
)
}
cfg
.
Stderr
=
false
cfg
.
Stdout
=
false
case
"stdout+file"
,
"file+stdout"
:
cfg
.
File
=
os
.
Getenv
(
envLoggingFile
)
if
cfg
.
File
!=
""
{
fmt
.
Fprint
(
os
.
Stderr
,
"please specify a GOLOG_FILE value to write to"
)
}
cfg
.
Stderr
=
false
cfg
.
Stdout
=
true
case
"stderr+file"
,
"file+stderr"
:
cfg
.
File
=
os
.
Getenv
(
envLoggingFile
)
if
cfg
.
File
!=
""
{
fmt
.
Fprint
(
os
.
Stderr
,
"please specify a GOLOG_FILE value to write to"
)
}
cfg
.
Stderr
=
true
cfg
.
Stdout
=
false
case
"stdout+stderr"
,
"stderr+stdout"
:
cfg
.
File
=
""
cfg
.
Stderr
=
true
cfg
.
Stdout
=
true
case
"stdout+stderr+file"
,
"stdout+file+stderr"
,
"stderr+stdout+file"
,
"stderr+file+stdout"
,
"file+stdout+stderr"
,
"file+stderr+stdout"
:
cfg
.
File
=
os
.
Getenv
(
envLoggingFile
)
if
cfg
.
File
!=
""
{
fmt
.
Fprint
(
os
.
Stderr
,
"please specify a GOLOG_FILE value to write to"
)
}
cfg
.
Stderr
=
true
cfg
.
Stdout
=
true
}
return
cfg
}
setup_test.go
View file @
ea955b1a
...
...
@@ -3,6 +3,7 @@ package log
import
(
"bytes"
"io"
"io/ioutil"
"os"
"strings"
"testing"
...
...
@@ -37,3 +38,87 @@ func TestGetLoggerDefault(t *testing.T) {
}
}
func
TestLogToFileAndStderr
(
t
*
testing
.
T
)
{
// setup stderr
r
,
w
,
err
:=
os
.
Pipe
()
if
err
!=
nil
{
t
.
Fatalf
(
"failed to open pipe: %v"
,
err
)
}
stderr
:=
os
.
Stderr
os
.
Stderr
=
w
defer
func
()
{
os
.
Stderr
=
stderr
}()
// setup file
logfile
,
err
:=
ioutil
.
TempFile
(
""
,
"go-log-test"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
os
.
Remove
(
logfile
.
Name
())
os
.
Setenv
(
envLoggingFile
,
logfile
.
Name
())
// set log output env var
os
.
Setenv
(
envLoggingOutput
,
"file+stderr"
)
SetupLogging
(
configFromEnv
())
log
:=
getLogger
(
"test"
)
want
:=
"scooby"
log
.
Error
(
want
)
w
.
Close
()
buf
:=
&
bytes
.
Buffer
{}
if
_
,
err
:=
io
.
Copy
(
buf
,
r
);
err
!=
nil
&&
err
!=
io
.
ErrClosedPipe
{
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
if
!
strings
.
Contains
(
buf
.
String
(),
want
)
{
t
.
Errorf
(
"got %q, wanted it to contain log output"
,
buf
.
String
())
}
content
,
err
:=
ioutil
.
ReadFile
(
logfile
.
Name
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
strings
.
Contains
(
string
(
content
),
want
)
{
t
.
Logf
(
"want: '%s', got: '%s'"
,
want
,
string
(
content
))
t
.
Fail
()
}
}
func
TestLogToFile
(
t
*
testing
.
T
)
{
// get tmp log file
logfile
,
err
:=
ioutil
.
TempFile
(
""
,
"go-log-test"
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
os
.
Remove
(
logfile
.
Name
())
// set the go-log file env var
os
.
Setenv
(
envLoggingFile
,
logfile
.
Name
())
SetupLogging
(
configFromEnv
())
log
:=
getLogger
(
"test"
)
// write log to file
want
:=
"grokgrokgrok"
log
.
Error
(
want
)
// read log file and check contents
content
,
err
:=
ioutil
.
ReadFile
(
logfile
.
Name
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
strings
.
Contains
(
string
(
content
),
want
)
{
t
.
Logf
(
"want: '%s', got: '%s'"
,
want
,
string
(
content
))
t
.
Fail
()
}
}
\ No newline at end of file
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