golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.0 KiB
56 lines
1.0 KiB
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 |
|
}
|
|
|