2 changed files with 64 additions and 38 deletions
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"log" |
||||
"os" |
||||
) |
||||
|
||||
type logDestination int |
||||
|
||||
const ( |
||||
logDestinationStdout logDestination = iota |
||||
logDestinationFile |
||||
) |
||||
|
||||
type logHandler struct { |
||||
logDestinationsParsed map[logDestination]struct{} |
||||
logFile *os.File |
||||
} |
||||
|
||||
func newLogHandler(logDestinationsParsed map[logDestination]struct{}, logFilePath string) (*logHandler, error) { |
||||
lh := &logHandler{ |
||||
logDestinationsParsed: logDestinationsParsed, |
||||
} |
||||
|
||||
if _, ok := logDestinationsParsed[logDestinationFile]; ok { |
||||
var err error |
||||
lh.logFile, err = os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
} |
||||
|
||||
log.SetOutput(lh) |
||||
|
||||
return lh, nil |
||||
} |
||||
|
||||
func (lh *logHandler) close() error { |
||||
if lh.logFile != nil { |
||||
lh.logFile.Close() |
||||
} |
||||
|
||||
return nil |
||||
} |
||||
|
||||
func (lh *logHandler) Write(p []byte) (int, error) { |
||||
if _, ok := lh.logDestinationsParsed[logDestinationStdout]; ok { |
||||
print(string(p)) |
||||
} |
||||
|
||||
if _, ok := lh.logDestinationsParsed[logDestinationFile]; ok { |
||||
lh.logFile.Write(p) |
||||
} |
||||
|
||||
return len(p), nil |
||||
} |
||||
Loading…
Reference in new issue