mirror of
https://github.com/safing/portbase
synced 2025-09-01 18:19:57 +00:00
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
// Copyright Safing ICS Technologies GmbH. Use of this source code is governed by the AGPL license that can be found in the LICENSE file.
|
|
|
|
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/Safing/portbase/taskmanager"
|
|
)
|
|
|
|
func writeLine(line *logLine) {
|
|
|
|
fmt.Println(formatLine(line, true))
|
|
|
|
// TODO: implement file logging and setting console/file logging
|
|
// TODO: use https://github.com/natefinch/lumberjack
|
|
|
|
}
|
|
|
|
func startWriter() {
|
|
shutdownWaitGroup.Add(1)
|
|
fmt.Println(fmt.Sprintf("%s%s ▶ BOF%s", InfoLevel.color(), time.Now().Format("060102 15:04:05.000"), endColor()))
|
|
go writer()
|
|
}
|
|
|
|
func writer() {
|
|
var line *logLine
|
|
startedTask := false
|
|
defer shutdownWaitGroup.Done()
|
|
|
|
for {
|
|
|
|
// wait until logs need to be processed
|
|
select {
|
|
case <-logsWaiting:
|
|
logsWaitingFlag.UnSet()
|
|
case <-shutdownSignal:
|
|
}
|
|
|
|
// wait for timeslot to log, or when buffer is full
|
|
select {
|
|
case <-taskmanager.StartVeryLowPriorityMicroTask():
|
|
startedTask = true
|
|
case <-forceEmptyingOfBuffer:
|
|
case <-shutdownSignal:
|
|
for {
|
|
select {
|
|
case line = <-logBuffer:
|
|
writeLine(line)
|
|
case <-time.After(10 * time.Millisecond):
|
|
fmt.Println(fmt.Sprintf("%s%s ◀ EOF%s", InfoLevel.color(), time.Now().Format("060102 15:04:05.000"), endColor()))
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// write all the logs!
|
|
writeLoop:
|
|
for {
|
|
select {
|
|
case line = <-logBuffer:
|
|
writeLine(line)
|
|
default:
|
|
if startedTask {
|
|
taskmanager.EndMicroTask()
|
|
startedTask = false
|
|
}
|
|
break writeLoop
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|