Skip to content

Commit b9218ef

Browse files
authored
Merge pull request #38 from mosca1337/fix_race
Setters should not race against Fire()
2 parents 62f5e06 + 978b66d commit b9218ef

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

lfshook.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ func NewHook(output interface{}, formatter logrus.Formatter) *LfsHook {
7676
// SetFormatter sets the format that will be used by hook.
7777
// If using text formatter, this method will disable color output to make the log file more readable.
7878
func (hook *LfsHook) SetFormatter(formatter logrus.Formatter) {
79+
hook.lock.Lock()
80+
defer hook.lock.Unlock()
7981
if formatter == nil {
8082
formatter = defaultFormatter
8183
} else {
@@ -91,19 +93,25 @@ func (hook *LfsHook) SetFormatter(formatter logrus.Formatter) {
9193

9294
// SetDefaultPath sets default path for levels that don't have any defined output path.
9395
func (hook *LfsHook) SetDefaultPath(defaultPath string) {
96+
hook.lock.Lock()
97+
defer hook.lock.Unlock()
9498
hook.defaultPath = defaultPath
9599
hook.hasDefaultPath = true
96100
}
97101

98102
// SetDefaultWriter sets default writer for levels that don't have any defined writer.
99103
func (hook *LfsHook) SetDefaultWriter(defaultWriter io.Writer) {
104+
hook.lock.Lock()
105+
defer hook.lock.Unlock()
100106
hook.defaultWriter = defaultWriter
101107
hook.hasDefaultWriter = true
102108
}
103109

104110
// Fire writes the log file to defined path or using the defined writer.
105111
// User who run this function needs write permissions to the file or directory if the file does not yet exist.
106112
func (hook *LfsHook) Fire(entry *logrus.Entry) error {
113+
hook.lock.Lock()
114+
defer hook.lock.Unlock()
107115
if hook.writers != nil || hook.hasDefaultWriter {
108116
return hook.ioWrite(entry)
109117
} else if hook.paths != nil || hook.hasDefaultPath {
@@ -122,9 +130,6 @@ func (hook *LfsHook) ioWrite(entry *logrus.Entry) error {
122130
ok bool
123131
)
124132

125-
hook.lock.Lock()
126-
defer hook.lock.Unlock()
127-
128133
if writer, ok = hook.writers[entry.Level]; !ok {
129134
if hook.hasDefaultWriter {
130135
writer = hook.defaultWriter
@@ -154,9 +159,6 @@ func (hook *LfsHook) fileWrite(entry *logrus.Entry) error {
154159
ok bool
155160
)
156161

157-
hook.lock.Lock()
158-
defer hook.lock.Unlock()
159-
160162
if path, ok = hook.paths[entry.Level]; !ok {
161163
if hook.hasDefaultPath {
162164
path = hook.defaultPath

0 commit comments

Comments
 (0)