mirror of
https://github.com/ergochat/ergo.git
synced 2025-12-20 10:10:08 -08:00
logger: Make safer to avoid file write races
This commit is contained in:
parent
861b65eb39
commit
a8e13b062b
1 changed files with 5 additions and 0 deletions
|
|
@ -53,6 +53,7 @@ var (
|
||||||
type Manager struct {
|
type Manager struct {
|
||||||
loggers []singleLogger
|
loggers []singleLogger
|
||||||
stderrWriteLock sync.Mutex
|
stderrWriteLock sync.Mutex
|
||||||
|
fileWriteLock sync.Mutex
|
||||||
DumpingRawInOut bool
|
DumpingRawInOut bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,6 +94,7 @@ func NewManager(config ...Config) (*Manager, error) {
|
||||||
Types: typeMap,
|
Types: typeMap,
|
||||||
ExcludedTypes: excludedTypeMap,
|
ExcludedTypes: excludedTypeMap,
|
||||||
stderrWriteLock: &logger.stderrWriteLock,
|
stderrWriteLock: &logger.stderrWriteLock,
|
||||||
|
fileWriteLock: &logger.fileWriteLock,
|
||||||
}
|
}
|
||||||
if typeMap["userinput"] || typeMap["useroutput"] || (typeMap["*"] && !(excludedTypeMap["userinput"] && excludedTypeMap["useroutput"])) {
|
if typeMap["userinput"] || typeMap["useroutput"] || (typeMap["*"] && !(excludedTypeMap["userinput"] && excludedTypeMap["useroutput"])) {
|
||||||
logger.DumpingRawInOut = true
|
logger.DumpingRawInOut = true
|
||||||
|
|
@ -164,6 +166,7 @@ type fileMethod struct {
|
||||||
// singleLogger represents a single logger instance.
|
// singleLogger represents a single logger instance.
|
||||||
type singleLogger struct {
|
type singleLogger struct {
|
||||||
stderrWriteLock *sync.Mutex
|
stderrWriteLock *sync.Mutex
|
||||||
|
fileWriteLock *sync.Mutex
|
||||||
MethodSTDERR bool
|
MethodSTDERR bool
|
||||||
MethodFile fileMethod
|
MethodFile fileMethod
|
||||||
Level Level
|
Level Level
|
||||||
|
|
@ -229,6 +232,8 @@ func (logger *singleLogger) Log(level Level, logType string, messageParts ...str
|
||||||
logger.stderrWriteLock.Unlock()
|
logger.stderrWriteLock.Unlock()
|
||||||
}
|
}
|
||||||
if logger.MethodFile.Enabled {
|
if logger.MethodFile.Enabled {
|
||||||
|
logger.fileWriteLock.Lock()
|
||||||
logger.MethodFile.Writer.WriteString(fullStringRaw + "\n")
|
logger.MethodFile.Writer.WriteString(fullStringRaw + "\n")
|
||||||
|
logger.fileWriteLock.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue