Merge pull request #490 from reasonerjt/job-service

Introduce hierachy of directories to store job log file
This commit is contained in:
Daniel Jiang 2016-07-07 14:08:40 +08:00 committed by GitHub
commit 958267eb10

View File

@ -22,14 +22,22 @@ import (
"github.com/vmware/harbor/utils/log"
"os"
"path/filepath"
"strconv"
)
// NewLogger create a logger for a speicified job
func NewLogger(jobID int64) *log.Logger {
logFile := GetJobLogPath(jobID)
d := filepath.Dir(logFile)
if _, err := os.Stat(d); os.IsNotExist(err) {
err := os.MkdirAll(d, 0660)
if err != nil {
log.Errorf("Failed to create directory for log file %s, the error: %v", logFile, err)
}
}
f, err := os.OpenFile(logFile, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0660)
if err != nil {
log.Errorf("Failed to open log file %s, the log of job %d will be printed to standard output", logFile, jobID)
log.Errorf("Failed to open log file %s, the log of job %d will be printed to standard output, the error: %v", logFile, jobID, err)
f = os.Stdout
}
return log.New(f, log.NewTextFormatter(), log.InfoLevel)
@ -37,6 +45,22 @@ func NewLogger(jobID int64) *log.Logger {
// GetJobLogPath returns the absolute path in which the job log file is located.
func GetJobLogPath(jobID int64) string {
fn := fmt.Sprintf("job_%d.log", jobID)
return filepath.Join(config.LogDir(), fn)
f := fmt.Sprintf("job_%d.log", jobID)
k := jobID / 1000
p := ""
var d string
for k > 0 {
d = strconv.FormatInt(k%1000, 10)
k = k / 1000
if k > 0 && len(d) == 1 {
d = "00" + d
}
if k > 0 && len(d) == 2 {
d = "0" + d
}
p = filepath.Join(d, p)
}
p = filepath.Join(config.LogDir(), p, f)
return p
}