예제 #1
0
파일: syslogd.go 프로젝트: inz/deis
func writeToDisk(m *syslog.Message) error {
	file, err := getLogFile(m)
	if err != nil {
		return err
	}
	bytes := []byte(m.String() + "\n")
	file.Write(bytes)
	return nil
}
예제 #2
0
파일: syslogd.go 프로젝트: inz/deis
func getLogFile(m *syslog.Message) (io.Writer, error) {
	r := regexp.MustCompile(`^.* ([-a-z0-9]+)(_v[0-9]+\.[a-z0-9\.]+)?\[[a-z0-9\.]+\].*`)
	match := r.FindStringSubmatch(m.String())
	if match == nil {
		return nil, errors.New("Could not find app name in message: " + m.String())
	}
	appName := match[1]
	filePath := path.Join(logRoot, appName+".log")
	// check if file exists
	exists, err := fileExists(filePath)
	if err != nil {
		return nil, err
	}
	// return a new file or the existing file for appending
	var file io.Writer
	if exists {
		file, err = os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0644)
	} else {
		file, err = os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0644)
	}
	return file, err
}