У меня есть приложение Golang, которое использует библиотеку go-logging (https://github.com/op/go-logging). Файл журнала генерируется правильно, но когда я останавливаю и перезапускаю приложение Go, этот файл журнала перезаписывается новым файлом журнала. Это не ошибка, Golang делает то, что она просила сделать. Но, если возможно, мне бы хотелось, чтобы новые журналы были добавлены в существующий файл журнала.Реализация файла журнала в Golang
Во-первых, отрывок из моего main.go:
package main
import (
"utils"
"webapp"
"odbc"
"constants"
"github.com/op/go-logging"
)
var config = &Configuration{}
var log = logging.MustGetLogger("main")
func main() {
// Load the configuration file
utils.Load(constants.CONFIG_PATH, config)
utils.InitLog(config.LOG)
...
}
Мои appUtils.go где определены utilitary функции:
package utils
import (
"github.com/op/go-logging"
"os"
"fmt"
)
func InitLog(config LOG) {
f, err := os.Create(config.LogFile)
backend := logging.NewLogBackend(f, "", 0)
format := logging.MustStringFormatter(config.FORMAT,)
backendFormatter := logging.NewBackendFormatter(backend, format)
// Only errors and more severe messages should be sent to backend1 logging.Level
logging.SetBackend(backendFormatter)
level, err := logging.LogLevel(config.LEVEL)
if err != nil {
logging.SetLevel(logging.ERROR, "")
} else{
logging.SetLevel(level, "")
}
}
type LOG struct {
FORMAT string
LEVEL string
LogFile string
}
В случае необходимости я также поставил содержание моей конфигурации. json:
{
"LOG":{
"LEVEL": "DEBUG",
"FORMAT": "%{color}%{time:15:04:05.000} %{shortfunc} => %{level:.4s} %{id:03x}%{color:reset} %{message}",
"LogFile": "logfile.log"
}
}
Является ли это возможным? я понял, что проблема исходит от этой линии:
f, err := os.Create(config.LogFile)
Новый файл создается после (пере) запуска приложения. Чтобы избежать этого, я попытался это:
var f *os.File
if _, err := os.Stat(config.LogFile); os.IsNotExist(err) {
f, err := os.Create(config.LogFile)
}
else {
f, err := os.OpenFile(config.LogFile, os.O_APPEND|os.O_WRONLY, 0600)
}
но это довольно Bullsh * т, он не работает.
Если это невозможно, должен ли я изменить свой config.json, чтобы генерировать файлы, которые имеют от имени дату с миллисекундами, например?
Я очень рекомендую вам воспользоваться моментом и реорганизовать свои пакеты и читать [эффективный GO] (https: // golang. орг/DOC/effective_go.html). – OneOfOne