최신 로그파일에 심볼릭 링크 생성

This commit is contained in:
2023-11-14 11:22:23 +09:00
parent 299a0a2bd3
commit 8d764c8d18

View File

@ -192,7 +192,7 @@ func prepareProcessLaunch(storageRoot string, req *shared.StartProcessRequest) *
return nil
}
func makeLogFile(meta *procmeta, idx int) string {
func makeLogFilePrefix(meta *procmeta) string {
now := time.Now().UTC()
ext := path.Ext(meta.args[0])
nameonly := path.Base(meta.args[0])
@ -200,8 +200,7 @@ func makeLogFile(meta *procmeta, idx int) string {
nameonly = nameonly[:len(nameonly)-len(ext)]
}
ts := now.Format("2006-01-02T15-04-05")
stdPrefix := path.Join(meta.cmd.Dir, "logs", fmt.Sprintf("%s_%s", nameonly, ts))
return fmt.Sprintf("%s_%d.log", stdPrefix, idx)
return path.Join(meta.cmd.Dir, "logs", fmt.Sprintf("%s_%s", nameonly, ts))
}
func (hc *houstonClient) launch(meta *procmeta) error {
@ -209,10 +208,6 @@ func (hc *houstonClient) launch(meta *procmeta) error {
if err != nil {
return err
}
stderr, err := meta.cmd.StderrPipe()
if err != nil {
return err
}
err = os.MkdirAll(path.Join(meta.cmd.Dir, "logs"), 0775)
if err != nil {
@ -233,7 +228,8 @@ func (hc *houstonClient) launch(meta *procmeta) error {
thisFileSize := 0
logFileIndex := 0
logFileName := makeLogFile(meta, logFileIndex)
logFileNamePrefix := makeLogFilePrefix(meta)
logFileName := fmt.Sprintf("%s_%d.log", logFileNamePrefix, logFileIndex)
targetFile, err := os.Create(logFileName)
if err != nil {
logger.Println("failed to create log file :", logFileName)
@ -241,7 +237,10 @@ func (hc *houstonClient) launch(meta *procmeta) error {
}
exef, _ := os.Executable()
os.Symlink(path.Base(targetFile.Name()), path.Join(path.Dir(exef), path.Dir(logFileName), meta.name+".log"))
linkePath := path.Join(path.Dir(exef), path.Dir(logFileName), meta.name+".log")
os.Remove(linkePath)
os.Symlink(path.Base(targetFile.Name()), linkePath)
defer func() {
if targetFile != nil {
@ -266,23 +265,23 @@ func (hc *houstonClient) launch(meta *procmeta) error {
}
}
if thisFileSize > 10*1024*1024 {
if thisFileSize > 5*1024*1024 {
logFileIndex++
logFileName := makeLogFile(meta, 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.Symlink(path.Base(targetFile.Name()), path.Join(path.Dir(exef), path.Dir(logFileName), meta.name+".log"))
os.Remove(linkePath)
os.Symlink(path.Base(targetFile.Name()), linkePath)
thisFileSize = 0
}
}
}
}
go stdReader(stderr)
go stdReader(stdout)
logger.Println("startChildProcess :", meta.cmd.Args)