@@ -44,18 +44,39 @@ func (f *fileTailer) Errors() chan Error {
4444 return f .errors
4545}
4646
47+ func getSeekArgs (readall bool ) (bool , int64 , int ) {
48+ if readall {
49+ return true , 0 , io .SeekEnd
50+ } else {
51+ return false , 0 , 0
52+ }
53+ }
54+
4755func RunFseventFileTailer (path string , readall bool , failOnMissingFile bool , logger simpleLogger ) Tailer {
48- return runFileTailer (path , readall , failOnMissingFile , logger , NewFseventWatcher )
56+ seek , offset , whence := getSeekArgs (readall )
57+ return runFileTailer (path , failOnMissingFile , logger , seek , offset , whence , NewFseventWatcher )
58+ }
59+
60+ func RunFseventFileTailerWithSeek (path string , failOnMissingFile bool , logger simpleLogger , offset int64 , whence int ) Tailer {
61+ return runFileTailer (path , failOnMissingFile , logger , true , offset , whence , NewFseventWatcher )
4962}
5063
5164func RunPollingFileTailer (path string , readall bool , failOnMissingFile bool , pollIntervall time.Duration , logger simpleLogger ) Tailer {
65+ seek , offset , whence := getSeekArgs (readall )
66+ makeWatcher := func (abspath string , _ * File ) (Watcher , error ) {
67+ return NewPollingWatcher (abspath , pollIntervall )
68+ }
69+ return runFileTailer (path , failOnMissingFile , logger , seek , offset , whence , makeWatcher )
70+ }
71+
72+ func RunPollingFileTailerWithSeek (path string , failOnMissingFile bool , pollIntervall time.Duration , logger simpleLogger , offset int64 , whence int ) Tailer {
5273 makeWatcher := func (abspath string , _ * File ) (Watcher , error ) {
5374 return NewPollingWatcher (abspath , pollIntervall )
5475 }
55- return runFileTailer (path , readall , failOnMissingFile , logger , makeWatcher )
76+ return runFileTailer (path , failOnMissingFile , logger , true , offset , whence , makeWatcher )
5677}
5778
58- func runFileTailer (path string , readall bool , failOnMissingFile bool , logger simpleLogger , makeWatcher func (string , * File ) (Watcher , error )) Tailer {
79+ func runFileTailer (path string , failOnMissingFile bool , logger simpleLogger , seek bool , seekOffset int64 , seekWhence int , makeWatcher func (string , * File ) (Watcher , error )) Tailer {
5980 if logger == nil {
6081 logger = & nilLogger {}
6182 }
@@ -71,7 +92,7 @@ func runFileTailer(path string, readall bool, failOnMissingFile bool, logger sim
7192 closed : false ,
7293 }
7394
74- file , abspath , err := openLogfile (path , readall , failOnMissingFile ) // file may be nil if failOnMissingFile is false and the file doesn't exist yet.
95+ file , abspath , err := openLogfile (path , failOnMissingFile , seek , seekOffset , seekWhence ) // file may be nil if failOnMissingFile is false and the file doesn't exist yet.
7596 if err != nil {
7697 go func (err error ) {
7798 writeError (errors , done , err , "failed to initialize file system watcher for %v" , path )
@@ -173,7 +194,7 @@ func runFileTailer(path string, readall bool, failOnMissingFile bool, logger sim
173194}
174195
175196// may return *File == nil if the file does not exist and failOnMissingFile == false
176- func openLogfile (path string , readall bool , failOnMissingFile bool ) (* File , string , error ) {
197+ func openLogfile (path string , failOnMissingFile bool , seek bool , seekOffset int64 , seekWhence int ) (* File , string , error ) {
177198 abspath , err := filepath .Abs (path )
178199 if err != nil {
179200 return nil , "" , err
@@ -182,8 +203,8 @@ func openLogfile(path string, readall bool, failOnMissingFile bool) (*File, stri
182203 if err != nil && (failOnMissingFile || ! os .IsNotExist (err )) {
183204 return nil , "" , err
184205 }
185- if ! readall && file != nil {
186- _ , err = file .Seek (0 , io . SeekEnd )
206+ if seek && file != nil {
207+ _ , err = file .Seek (seekOffset , seekWhence )
187208 if err != nil {
188209 if file != nil {
189210 file .Close ()
0 commit comments