5
5
package log
6
6
7
7
import (
8
- "encoding/json"
9
8
"errors"
10
9
"fmt"
11
10
"io/ioutil"
12
- "log"
13
11
"os"
14
12
"path/filepath"
15
13
"strings"
16
14
"sync"
17
15
"time"
16
+
17
+ "github.com/inconshreveable/log15"
18
18
)
19
19
20
20
// FileLogWriter implements LoggerInterface.
21
21
// It writes messages by lines limit, file size limit, or time frequency.
22
22
type FileLogWriter struct {
23
- * log.Logger
24
23
mw * MuxWriter
25
- // The opened file
26
- Filename string `json:"filename"`
27
24
28
- Maxlines int `json:"maxlines"`
25
+ Format log15.Format
26
+ Filename string
27
+ Maxlines int
29
28
maxlines_curlines int
30
29
31
30
// Rotate at size
32
- Maxsize int `json:"maxsize"`
31
+ Maxsize int
33
32
maxsize_cursize int
34
33
35
34
// Rotate daily
36
- Daily bool `json:"daily"`
37
- Maxdays int64 `json:"maxdays"`
35
+ Daily bool
36
+ Maxdays int64
38
37
daily_opendate int
39
38
40
- Rotate bool `json:"rotate"`
41
-
42
- startLock sync.Mutex // Only one log can write to the file
43
-
44
- Level LogLevel `json:"level"`
39
+ Rotate bool
40
+ startLock sync.Mutex
45
41
}
46
42
47
43
// an *os.File writer with locker.
@@ -66,37 +62,29 @@ func (l *MuxWriter) SetFd(fd *os.File) {
66
62
}
67
63
68
64
// create a FileLogWriter returning as LoggerInterface.
69
- func NewFileWriter () LoggerInterface {
65
+ func NewFileWriter () * FileLogWriter {
70
66
w := & FileLogWriter {
71
67
Filename : "" ,
68
+ Format : log15 .LogfmtFormat (),
72
69
Maxlines : 1000000 ,
73
70
Maxsize : 1 << 28 , //256 MB
74
71
Daily : true ,
75
72
Maxdays : 7 ,
76
73
Rotate : true ,
77
- Level : TRACE ,
78
74
}
79
75
// use MuxWriter instead direct use os.File for lock write when rotate
80
76
w .mw = new (MuxWriter )
81
- // set MuxWriter as Logger's io.Writer
82
- w .Logger = log .New (w .mw , "" , log .Ldate | log .Ltime )
83
77
return w
84
78
}
85
79
86
- // Init file logger with json config.
87
- // config like:
88
- // {
89
- // "filename":"log/gogs.log",
90
- // "maxlines":10000,
91
- // "maxsize":1<<30,
92
- // "daily":true,
93
- // "maxdays":15,
94
- // "rotate":true
95
- // }
96
- func (w * FileLogWriter ) Init (config string ) error {
97
- if err := json .Unmarshal ([]byte (config ), w ); err != nil {
98
- return err
99
- }
80
+ func (w * FileLogWriter ) Log (r * log15.Record ) error {
81
+ data := w .Format .Format (r )
82
+ w .docheck (len (data ))
83
+ _ , err := w .mw .Write (data )
84
+ return err
85
+ }
86
+
87
+ func (w * FileLogWriter ) Init () error {
100
88
if len (w .Filename ) == 0 {
101
89
return errors .New ("config must have filename" )
102
90
}
@@ -131,17 +119,6 @@ func (w *FileLogWriter) docheck(size int) {
131
119
w .maxsize_cursize += size
132
120
}
133
121
134
- // write logger message into file.
135
- func (w * FileLogWriter ) WriteMsg (msg string , skip int , level LogLevel ) error {
136
- if level < w .Level {
137
- return nil
138
- }
139
- n := 24 + len (msg ) // 24 stand for the length "2013/06/23 21:00:22 [T] "
140
- w .docheck (n )
141
- w .Logger .Println (msg )
142
- return nil
143
- }
144
-
145
122
func (w * FileLogWriter ) createLogFile () (* os.File , error ) {
146
123
// Open the log file
147
124
return os .OpenFile (w .Filename , os .O_WRONLY | os .O_APPEND | os .O_CREATE , 0644 )
@@ -227,7 +204,7 @@ func (w *FileLogWriter) deleteOldLog() {
227
204
}
228
205
229
206
// destroy file logger, close file writer.
230
- func (w * FileLogWriter ) Destroy () {
207
+ func (w * FileLogWriter ) Close () {
231
208
w .mw .fd .Close ()
232
209
}
233
210
@@ -237,7 +214,3 @@ func (w *FileLogWriter) Destroy() {
237
214
func (w * FileLogWriter ) Flush () {
238
215
w .mw .fd .Sync ()
239
216
}
240
-
241
- func init () {
242
- Register ("file" , NewFileWriter )
243
- }
0 commit comments