github.com/v2pro/plz@v0.0.0-20221028024117-e5f9aec5b631/countlog/output/output_file.go (about) 1 package output 2 // 3 //import ( 4 // "os" 5 // "path/filepath" 6 // "time" 7 //) 8 // 9 //type fileLogOutput struct { 10 // windowSize int64 11 // logFile string 12 // rotateAfter int64 13 // openedFile *os.File 14 // openedFileArchiveTo string 15 //} 16 // 17 //func (output *fileLogOutput) Close() { 18 // if output.openedFile != nil { 19 // output.openedFile.Close() 20 // } 21 //} 22 // 23 //func (output *fileLogOutput) openLogFile() { 24 // var err error 25 // output.openedFile, err = os.OpenFile(output.logFile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644) 26 // if err != nil { 27 // os.Stderr.Write([]byte("failed to open log file: " + 28 // output.logFile + ", " + err.Error() + "\n")) 29 // os.Stderr.Sync() 30 // } 31 // output.openedFileArchiveTo = output.logFile + "." + time.Now().Format("200601021504") 32 //} 33 // 34 //func (output *fileLogOutput) archiveLogFile() { 35 // output.openedFile.Close() 36 // output.openedFile = nil 37 // err := os.Rename(output.logFile, output.openedFileArchiveTo) 38 // if err != nil { 39 // os.Stderr.Write([]byte("failed to rename to archived log file: " + 40 // output.openedFileArchiveTo + ", " + err.Error() + "\n")) 41 // os.Stderr.Sync() 42 // } 43 //} 44 // 45 //func (output *fileLogOutput) OutputLog(level int, timestamp int64, formattedEvent []byte) { 46 // if timestamp > output.rotateAfter { 47 // now := time.Now() 48 // output.rotateAfter = (int64(now.UnixNano()/output.windowSize) + 1) * output.windowSize 49 // output.archiveLogFile() 50 // output.openLogFile() 51 // } 52 // if output.openedFile != nil { 53 // output.openedFile.Write(formattedEvent) // silently ignore error 54 // } 55 //} 56 // 57 //type osFileLogOutput struct { 58 // logFile *os.File 59 //} 60 // 61 //func (output *osFileLogOutput) Close() { 62 // output.logFile.Sync() 63 //} 64 // 65 //func (output *osFileLogOutput) OutputLog(level int, timestamp int64, formattedEvent []byte) { 66 // output.logFile.Write(withColorLevelPrefix(level, formattedEvent)) 67 //} 68 // 69 //func NewFileLogOutput(logFile string) LogOutput { 70 // switch logFile { 71 // case "STDOUT": 72 // return &osFileLogOutput{os.Stdout} 73 // case "STDERR": 74 // return &osFileLogOutput{os.Stderr} 75 // default: 76 // output := &fileLogOutput{ 77 // windowSize: int64(time.Hour), 78 // logFile: logFile, 79 // } 80 // err := os.MkdirAll(filepath.Dir(logFile), 0755) 81 // if err != nil { 82 // os.Stderr.Write([]byte("failed to create dir for log file: " + 83 // filepath.Dir(logFile) + ", " + err.Error() + "\n")) 84 // os.Stderr.Sync() 85 // } 86 // output.openLogFile() 87 // output.rotateAfter = (int64(time.Now().UnixNano()/output.windowSize) + 1) * output.windowSize 88 // return output 89 // } 90 //}