Closed honmaharuki closed 11 months ago
開閉操作自体は問題なさそう。 bufioとか使ってバッファリングしたりすれば。。。
https://github.com/rs/zerolog#set-as-standard-logger-output 標準出力のロガーとして設定可能
共有ログインスタンス
package main
import ( "os" "github.com/rs/zerolog" "github.com/rs/zerolog/log" )
// パッケージレベルの変数としてログインスタンスを定義 var logger zerolog.Logger
func init() { // ログファイルを開く f, err := os.OpenFile("log.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666) if err != nil { log.Fatal().Err(err).Msg("Failed to open log file") } // ログインスタンスを初期化 logger = zerolog.New(f).With().Timestamp().Logger() }
func main() { // アプリケーション全体でログインスタンスを使用 logger.Info().Msg("This is an info message") logger.Error().Msg("This is an error message") }
こちらも
package main
import ( "bufio" "os" "os/signal" "syscall" "time" "github.com/natefinch/lumberjack" "github.com/rs/zerolog" "github.com/rs/zerolog/log" )
// パッケージレベルの変数としてログインスタンスとバッファリングされたWriterを定義 var logger zerolog.Logger var bw *bufio.Writer
func init() { // lumberjack.Loggerを作成 lj := &lumberjack.Logger{ Filename: "log.txt", MaxSize: 500, // megabytes MaxBackups: 3, MaxAge: 28, //days Compress: true, // disabled by default }
// バッファリングされたWriterを作成
bw = bufio.NewWriter(lj)
// ログインスタンスを初期化
logger = zerolog.New(bw).With().Timestamp().Logger()
// タイマーを設定して定期的にフラッシュを行うゴルーチンを起動
go func() {
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
bw.Flush()
}
}
}()
}
func main() { // シグナルハンドラを設定 c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) go func() { <-c bw.Flush() os.Exit(1) }()
// アプリケーション全体でログインスタンスを使用
logger.Info().Msg("This is an info message")
logger.Error().Msg("This is an error message")
}
go func() { <-c bw.Flush() os.Exit(1) }()
この部分について、ちょいちょい「go言語にはアロー演算子は無い」という表記を見るのですが「<-c」部分はどのような意味を持つでしょうか...?
そいつはチャネル演算というもので、チャネルへの送受信を行うものらしいです! https://www.dragonarrow.work/articles/238
・ファイル開閉操作がアプリ動作に影響を与えない範囲に収まるか?:bufio
・アプリ全体で一つのロガーオブジェクトを共有するような方法はないか? 上記コメントのコード ・日付単位のログローテーション (ファイルサイズのローテーションは一応残す) 下記ソースを基にして作成 chatGPT案 https://discordapp.com/channels/880986184380215296/1002743283937722519/1134665070320832613
東さん改良案 https://discordapp.com/channels/880986184380215296/1002743283937722519/1134665617807515728
また本メソッド群を利用した場合は毎回ファイルを開く処理が入るかと思いますので下記点について議論いただきますようお願いいたします。
_Originally posted by @doranko in https://github.com/gBenkyous/inTime/pull/59#discussion_r1257218828_