diff --git a/client/operation.go b/client/operation.go index 676aaee..cc60987 100644 --- a/client/operation.go +++ b/client/operation.go @@ -272,30 +272,65 @@ func (hc *houstonClient) launch(meta *procmeta) error { thisFileSize := 0 logFileIndex := 0 - logFileNamePrefix := makeLogFilePrefix(meta, index) - logFileName := fmt.Sprintf("%s_%d.log", logFileNamePrefix, logFileIndex) - targetFile, err := os.Create(logFileName) - if err != nil { - logger.Println("failed to create log file :", logFileName) - return - } - - exef, _ := os.Executable() - var linkPath string - if index == 0 { - linkPath = path.Join(path.Dir(exef), path.Dir(logFileName), meta.name+".log") - } else { - linkPath = path.Join(path.Dir(exef), path.Dir(logFileName), fmt.Sprintf("%s_%d.log", meta.name, index)) - } - - os.Remove(linkPath) - os.Symlink(path.Base(filepath.ToSlash(targetFile.Name())), linkPath) - - defer func() { - if targetFile != nil { - targetFile.Close() + var logWriter func([]byte) + if *logger.UseLogFile { + logFileNamePrefix := makeLogFilePrefix(meta, index) + logFileName := fmt.Sprintf("%s_%d.log", logFileNamePrefix, logFileIndex) + targetFile, err := os.Create(logFileName) + if err != nil { + logger.Println("failed to create log file :", logFileName) + return } - }() + + exef, _ := os.Executable() + var linkPath string + if index == 0 { + linkPath = path.Join(path.Dir(exef), path.Dir(logFileName), meta.name+".log") + } else { + linkPath = path.Join(path.Dir(exef), path.Dir(logFileName), fmt.Sprintf("%s_%d.log", meta.name, index)) + } + + os.Remove(linkPath) + os.Symlink(path.Base(filepath.ToSlash(targetFile.Name())), linkPath) + + defer func() { + if targetFile != nil { + targetFile.Close() + } + }() + + logWriter = func(buff []byte) { + for written := 0; written < len(buff); { + n, err := targetFile.Write(buff) + if err != nil { + logger.Println("write log file failed :", logFileName, err) + break + } else { + written += n + thisFileSize += n + } + } + + if thisFileSize > 5*1024*1024 { + logFileIndex++ + logFileName = fmt.Sprintf("%s_%d.log", logFileNamePrefix, logFileIndex) + nextTargetFile, err := os.Create(logFileName) + if err != nil { + logger.Println("failed to create log file :", logFileName) + } else { + targetFile.Close() + targetFile = nextTargetFile + os.Remove(linkPath) + os.Symlink(path.Base(filepath.ToSlash(targetFile.Name())), linkPath) + thisFileSize = 0 + } + } + } + } else { + logWriter = func(buff []byte) { + os.Stdout.Write(buff) + } + } readingMetric := false var metricBuffer []byte @@ -362,31 +397,7 @@ func (hc *houstonClient) launch(meta *procmeta) error { continue } - for written := 0; written < len(buff); { - n, err := targetFile.Write(buff) - if err != nil { - logger.Println("write log file failed :", logFileName, err) - break - } else { - written += n - thisFileSize += n - } - } - - if thisFileSize > 5*1024*1024 { - logFileIndex++ - logFileName = fmt.Sprintf("%s_%d.log", logFileNamePrefix, logFileIndex) - nextTargetFile, err := os.Create(logFileName) - if err != nil { - logger.Println("failed to create log file :", logFileName) - } else { - targetFile.Close() - targetFile = nextTargetFile - os.Remove(linkPath) - os.Symlink(path.Base(filepath.ToSlash(targetFile.Name())), linkPath) - thisFileSize = 0 - } - } + logWriter(buff) } }