Skip to content

Commit f642533

Browse files
committed
glog: introduce createInDir function as in internal version
1 parent 65d3f26 commit f642533

File tree

1 file changed

+30
-14
lines changed

1 file changed

+30
-14
lines changed

glog_file.go

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -116,32 +116,48 @@ var onceLogDirs sync.Once
116116
// contains tag ("INFO", "FATAL", etc.) and t. If the file is created
117117
// successfully, create also attempts to update the symlink for that tag, ignoring
118118
// errors.
119-
func create(tag string, t time.Time) (f *os.File, filename string, err error) {
119+
func create(tag string, t time.Time, dir string) (f *os.File, filename string, err error) {
120+
if dir != "" {
121+
f, name, err := createInDir(dir, tag, t)
122+
if err == nil {
123+
return f, name, err
124+
}
125+
return nil, "", fmt.Errorf("log: cannot create log: %v", err)
126+
}
127+
120128
onceLogDirs.Do(createLogDirs)
121129
if len(logDirs) == 0 {
122130
return nil, "", errors.New("log: no log dirs")
123131
}
124-
name, link := logName(tag, t)
125132
var lastErr error
126133
for _, dir := range logDirs {
127-
fname := filepath.Join(dir, name)
128-
f, err := os.Create(fname)
134+
f, name, err := createInDir(dir, tag, t)
129135
if err == nil {
130-
symlink := filepath.Join(dir, link)
131-
os.Remove(symlink) // ignore err
132-
os.Symlink(name, symlink) // ignore err
133-
if *logLink != "" {
134-
lsymlink := filepath.Join(*logLink, link)
135-
os.Remove(lsymlink) // ignore err
136-
os.Symlink(fname, lsymlink) // ignore err
137-
}
138-
return f, fname, nil
136+
return f, name, err
139137
}
140138
lastErr = err
141139
}
142140
return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr)
143141
}
144142

143+
func createInDir(dir, tag string, t time.Time) (f *os.File, name string, err error) {
144+
name, link := logName(tag, t)
145+
fname := filepath.Join(dir, name)
146+
f, err = os.Create(fname)
147+
if err == nil {
148+
symlink := filepath.Join(dir, link)
149+
os.Remove(symlink) // ignore err
150+
os.Symlink(name, symlink) // ignore err
151+
if *logLink != "" {
152+
lsymlink := filepath.Join(*logLink, link)
153+
os.Remove(lsymlink) // ignore err
154+
os.Symlink(fname, lsymlink) // ignore err
155+
}
156+
return f, fname, nil
157+
}
158+
return nil, "", err
159+
}
160+
145161
// flushSyncWriter is the interface satisfied by logging destinations.
146162
type flushSyncWriter interface {
147163
Flush() error
@@ -281,7 +297,7 @@ const footer = "\nCONTINUED IN NEXT FILE\n"
281297
func (sb *syncBuffer) rotateFile(now time.Time) error {
282298
var err error
283299
pn := "<none>"
284-
file, name, err := create(sb.sev.String(), now)
300+
file, name, err := create(sb.sev.String(), now, "")
285301
sb.madeAt = now
286302

287303
if sb.file != nil {

0 commit comments

Comments
 (0)