go-loggingライブラリー(https://github.com/op/go-logging)を使用するGolangアプリケーションがあります。ログファイルは正しく生成されますが、Goアプリケーションを停止して再起動すると、このログファイルは新しいログファイルで上書きされます。それはバグではありません、ゴランはそれは何をするように求めています。しかし、可能であれば、新しいログを既存のログファイルに追加することをお勧めします。Golangにログファイルアペンダーを実装します。
まず、私のmain.goの抜粋:utilitary関数が定義されてい
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:
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の* tのですが、それがすべてでは動作しません:私はこれを試したことを避けるために 。
実現できない場合は、名前にミリ秒の日付を持つファイルを生成するためにconfig.jsonを変更する必要がありますか?
は、私は非常に非常には、瞬間を取り、あなたのパッケージを再編成し、[有効に行く](HTTPSを読むことをお勧めします。 org/doc/effective_go.html)。 – OneOfOne