2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go言語によるログファイル出力

Posted at

Go言語でログファイルを出力する基本的な方法について記載します。

基本

まず、基本的なログ出力を見てみましょう。以下は、標準ライブラリのlogパッケージを使用してログをファイルに出力するシンプルな例です。

// 必要なパッケージをインポート
package main

import (
	"log"
	"os"
)

func main() {
	// ログを書き込むファイルを開く(なければ作成)
	file, err := os.OpenFile("testlogfile.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		// エラーハンドリング
		log.Fatal(err)
	}

	// 関数が終了する際にファイルを閉じる
	defer file.Close()

	// ログの出力先をファイルに設定
	log.SetOutput(file)

	// ログを出力
	log.Println("This is a test log entry")
}

ログレベルとカスタムフォーマット

しかし、これだけでは不十分です。私たちは異なるログレベルを持つメッセージを出力したいし、ログメッセージのフォーマットをカスタマイズしたい場合もあります。そこで登場するのが、logrusというパッケージです。

// 必要なパッケージをインポート
package main

import (
	"os"

	log "github.com/sirupsen/logrus"
)

func main() {
	// ログを書き込むファイルを開く(なければ作成)
	file, err := os.OpenFile("testlogfile.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
	if err != nil {
		// エラーハンドリング
		log.Fatal(err)
	}

	// 関数が終了する際にファイルを閉じる
	defer file.Close()

	// ログの出力先をファイルに設定
	log.SetOutput(file)

	// ログのフォーマットを設定(時間を含める)
	log.SetFormatter(&log.TextFormatter{
		FullTimestamp: true,
	})

	// 異なるログレベルでメッセージを出力
	log.Info("This is an info message")
	log.Warning("This is a warning message")
	log.Error("This is an error message")
}

logrusを使用すると、ログレベルを指定してメッセージを出力することができます。また、log.SetFormatterを使用すると、ログメッセージのフォーマットをカスタマイズできます。

ログローテーション

さらに、ログファイルが大きくなりすぎると管理が難しくなるため、定期的に新しいログファイルに切り替える必要があります。これをログローテーションと呼びます。

Go言語でログローテーションを実装するには、lumberjackというパッケージを使用します。

// 必要なパッケージをインポート
package main

import (
	"github.com/natefinch/lumberjack"
	log "github.com/sirupsen/logrus"
)

func main() {
	// ログの出力先とローテーションの設定を行う
	log.SetOutput(&lumberjack.Logger{
		Filename:   "testlogfile.log", // ログファイルの名前
		MaxSize:    500, // ログファイルの最大サイズ(MB)
		MaxBackups: 3, // バックアップファイルの最大数
		MaxAge:     28, // バックアップファイルの最大保存日数
	})

	// ログのフォーマットを設定(時間を含める)
	log.SetFormatter(&log.TextFormatter{
		FullTimestamp: true,
	})

	// 異なるログレベルでメッセージを出力
	log.Info("This is an info message")
	log.Warning("This is a warning message")
	log.Error("This is an error message")
}

以上のコードは、ログファイルが500MBに達すると新しいファイルに切り替わり、古いファイルは最大3つまで保存され、それぞれのファイルは最大28日間保存されます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?