|
@@ -53,6 +53,7 @@ var (
|
53
|
53
|
type Manager struct {
|
54
|
54
|
loggers []singleLogger
|
55
|
55
|
stderrWriteLock sync.Mutex
|
|
56
|
+ fileWriteLock sync.Mutex
|
56
|
57
|
DumpingRawInOut bool
|
57
|
58
|
}
|
58
|
59
|
|
|
@@ -93,6 +94,7 @@ func NewManager(config ...Config) (*Manager, error) {
|
93
|
94
|
Types: typeMap,
|
94
|
95
|
ExcludedTypes: excludedTypeMap,
|
95
|
96
|
stderrWriteLock: &logger.stderrWriteLock,
|
|
97
|
+ fileWriteLock: &logger.fileWriteLock,
|
96
|
98
|
}
|
97
|
99
|
if typeMap["userinput"] || typeMap["useroutput"] || (typeMap["*"] && !(excludedTypeMap["userinput"] && excludedTypeMap["useroutput"])) {
|
98
|
100
|
logger.DumpingRawInOut = true
|
|
@@ -164,6 +166,7 @@ type fileMethod struct {
|
164
|
166
|
// singleLogger represents a single logger instance.
|
165
|
167
|
type singleLogger struct {
|
166
|
168
|
stderrWriteLock *sync.Mutex
|
|
169
|
+ fileWriteLock *sync.Mutex
|
167
|
170
|
MethodSTDERR bool
|
168
|
171
|
MethodFile fileMethod
|
169
|
172
|
Level Level
|
|
@@ -229,6 +232,8 @@ func (logger *singleLogger) Log(level Level, logType string, messageParts ...str
|
229
|
232
|
logger.stderrWriteLock.Unlock()
|
230
|
233
|
}
|
231
|
234
|
if logger.MethodFile.Enabled {
|
|
235
|
+ logger.fileWriteLock.Lock()
|
232
|
236
|
logger.MethodFile.Writer.WriteString(fullStringRaw + "\n")
|
|
237
|
+ logger.fileWriteLock.Unlock()
|
233
|
238
|
}
|
234
|
239
|
}
|