...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package logger
16
17 import (
18 "io"
19 "os"
20 )
21
22
23 const (
24 DefaultFileName = "log"
25 DefaultFileMode = 0644
26 DefaultFileFlags = os.O_CREATE | os.O_APPEND | os.O_WRONLY
27 )
28
29
30 type File struct {
31 name string
32 stream *Stream
33 flags int
34 mode os.FileMode
35 }
36
37
38 func NewFile() *File {
39 f := &File{
40 name: DefaultFileName,
41 mode: DefaultFileMode,
42 flags: DefaultFileFlags,
43 stream: NewStream(),
44 }
45
46 f.stream.SetOpener(f)
47
48 return f
49 }
50
51
52 func (f *File) SetStreamHandler(handler StreamHandler) *File {
53 f.stream.SetStreamHandler(handler)
54 return f
55 }
56
57
58 func (f *File) Open() (io.WriteCloser, error) {
59 return os.OpenFile(f.name, f.flags, f.mode)
60 }
61
62
63 func (f *File) Enable() Handler {
64 return f.stream.Enable()
65 }
66
67
68 func (f *File) Disable() Handler {
69 return f.stream.Disable()
70 }
71
72
73 func (f *File) IsEnabled() bool {
74 return f.stream.IsEnabled()
75 }
76
77
78 func (f *File) SetFormatter(formatter *Formatter) Handler {
79 return f.stream.SetFormatter(formatter)
80 }
81
82
83 func (f *File) GetFormatter() *Formatter {
84 return f.stream.GetFormatter()
85 }
86
87
88 func (f *File) SetLevel(level int) Handler {
89 return f.stream.SetLevel(level)
90 }
91
92
93 func (f *File) SetMinimumLevel(level int) Handler {
94 return f.stream.SetMinimumLevel(level)
95 }
96
97
98 func (f *File) GetMinimumLevel() int {
99 return f.stream.GetMinimumLevel()
100 }
101
102
103 func (f *File) SetMaximumLevel(level int) Handler {
104 return f.stream.SetMaximumLevel(level)
105 }
106
107
108 func (f *File) GetMaximumLevel() int {
109 return f.stream.GetMaximumLevel()
110 }
111
112
113 func (f *File) SetLevelRange(min, max int) Handler {
114 return f.stream.SetLevelRange(min, max)
115 }
116
117
118 func (f *File) GetLevelRange() (min, max int) {
119 return f.stream.GetLevelRange()
120 }
121
122
123 func (f *File) SetName(name string) *File {
124 f.stream.Lock()
125 defer f.stream.Unlock()
126
127 if f.name != name {
128 f.name = name
129 f.stream.Reopen()
130 }
131
132 return f
133 }
134
135
136 func (f *File) GetName() string {
137 f.stream.RLock()
138 defer f.stream.RUnlock()
139
140 return f.name
141 }
142
143
144 func (f *File) SetFlags(flags int) *File {
145 f.stream.Lock()
146 defer f.stream.Unlock()
147
148 if f.flags != flags {
149 f.flags = flags
150 f.stream.Reopen()
151 }
152
153 return f
154 }
155
156
157 func (f *File) GetFlags() int {
158 f.stream.RLock()
159 defer f.stream.RUnlock()
160
161 return f.flags
162 }
163
164
165 func (f *File) SetMode(mode os.FileMode) *File {
166 f.stream.Lock()
167 defer f.stream.Unlock()
168
169 if f.mode != mode {
170 f.mode = mode
171 f.stream.Reopen()
172 }
173
174 return f
175 }
176
177
178 func (f *File) GetMode() os.FileMode {
179 f.stream.RLock()
180 defer f.stream.RUnlock()
181
182 return f.mode
183 }
184
185
186 func (f *File) Emit(record *Record) error {
187 return f.stream.Emit(record)
188 }
189
190
191 func (f *File) Close() error {
192 return f.stream.Close()
193 }
194
View as plain text