1- // fileMan maintains opened files shared by multiple loggerChan
2-
31package serverLog
42
53import (
@@ -15,41 +13,52 @@ type FileMan struct {
1513 dests []* fileDest
1614}
1715
18- func (fMan * FileMan ) getWritingCh (fsPath string , file * os.File ) (chan <- []byte , error ) {
19- if len (fsPath ) == 0 && file == nil {
16+ func (fMan * FileMan ) ReOpen () []error {
17+ var errs []error
18+
19+ for _ , dest := range fMan .dests {
20+ err := dest .reopen ()
21+ if err != nil {
22+ errs = append (errs , err )
23+ }
24+ }
25+
26+ return errs
27+ }
28+
29+ func (fMan * FileMan ) Close () {
30+ for _ , dest := range fMan .dests {
31+ dest .close ()
32+ }
33+ fMan .wg .Wait ()
34+ }
35+
36+ func (fMan * FileMan ) getWritingCh (fsPath string ) (chan <- []byte , error ) {
37+ if len (fsPath ) == 0 {
2038 return nil , errors .New ("log file not provided" )
2139 }
2240
41+ var file * os.File
2342 var info os.FileInfo
2443 var err error
2544
26- if file == nil { // regular file
27- var ch chan <- []byte
28- file , info , err = getFileInfoIfNotMatch (fsPath , func (info os.FileInfo ) bool {
29- for _ , dest := range fMan .dests {
30- if os .SameFile (info , dest .info ) {
31- ch = dest .ch
32- return true
33- }
34- }
35- return false
36- })
37-
38- if err != nil {
39- return nil , err
40- }
41-
42- if ch != nil {
43- return ch , nil
44- }
45- } else { // Stdout or Stderr
45+ var ch chan <- []byte
46+ file , info , err = getFileInfoIfNotMatch (fsPath , func (info os.FileInfo ) bool {
4647 for _ , dest := range fMan .dests {
47- if file == dest .file {
48- return dest .ch , nil
48+ if os .SameFile (info , dest .info ) {
49+ ch = dest .ch
50+ return true
4951 }
5052 }
53+ return false
54+ })
55+
56+ if err != nil {
57+ return nil , err
58+ }
5159
52- fsPath = file .Name ()
60+ if ch != nil {
61+ return ch , nil
5362 }
5463
5564 dest := newFileDest (fsPath , file , info )
@@ -64,37 +73,12 @@ func (fMan *FileMan) getWritingCh(fsPath string, file *os.File) (chan<- []byte,
6473 return dest .ch , nil
6574}
6675
67- func (fMan * FileMan ) Reopen () []error {
68- var errs []error
69-
70- for _ , dest := range fMan .dests {
71- err := dest .reopen ()
72- if err != nil {
73- errs = append (errs , err )
74- }
75- }
76-
77- return errs
78- }
79-
80- func (fMan * FileMan ) Close () {
81- for _ , dest := range fMan .dests {
82- dest .close ()
83- }
84- fMan .wg .Wait ()
85- }
86-
87- func (fMan * FileMan ) newLogChan (fsPath string , dashFile * os.File ) (loggerChan , error ) {
76+ func (fMan * FileMan ) newLogChan (fsPath string ) (loggerChan , error ) {
8877 var ch chan <- []byte
8978 var err error
9079
9180 if len (fsPath ) > 0 {
92- if fsPath == "-" {
93- ch , err = fMan .getWritingCh ("" , dashFile )
94- } else {
95- ch , err = fMan .getWritingCh (fsPath , nil )
96- }
97-
81+ ch , err = fMan .getWritingCh (fsPath )
9882 if err != nil {
9983 return nil , err
10084 }
@@ -106,20 +90,16 @@ func (fMan *FileMan) newLogChan(fsPath string, dashFile *os.File) (loggerChan, e
10690func (fMan * FileMan ) NewLogger (accLogFilename , errLogFilename string ) (* Logger , []error ) {
10791 var errs []error
10892
109- accChan , err := fMan .newLogChan (accLogFilename , os . Stdout )
93+ accChan , err := fMan .newLogChan (accLogFilename )
11094 if err != nil {
11195 errs = append (errs , err )
11296 }
11397
114- errChan , err := fMan .newLogChan (errLogFilename , os . Stderr )
98+ errChan , err := fMan .newLogChan (errLogFilename )
11599 if err != nil {
116100 errs = append (errs , err )
117101 }
118102
119- if len (errs ) > 0 {
120- return nil , errs
121- }
122-
123103 logger := & Logger {
124104 acc : accChan ,
125105 err : errChan ,
0 commit comments