カテゴリ: Go言語 更新日: 2025/12/10

Go言語のエラー出力(ログ)を整理するテクニック!初心者でもわかるログ管理の基本

Go言語のエラー出力(ログ)を整理するテクニック
Go言語のエラー出力(ログ)を整理するテクニック

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語でプログラムが失敗したときのエラーをどうやって見やすく記録すればいいんですか?」

先生

「エラーを記録することはとても大事です。Go言語では『ログ』と呼ばれる記録方法があり、整理して出力することで後で調べやすくなります。具体的なテクニックを説明しますね。」

生徒

「ログって何ですか?エラーとどう違うんですか?」

先生

「ログとは、プログラムの動きや問題が起きた時の情報をファイルや画面に書き出すことです。エラーは問題そのもの、ログはその問題の記録や説明と思ってください。」

生徒

「なるほど!具体的にどうやってログを整理するんですか?」

先生

「いくつか基本のテクニックがあります。順番に説明しますよ。」

1. Goの標準logパッケージを使う

1. Goの標準logパッケージを使う
1. Goの標準logパッケージを使う

Goには標準でlogパッケージが用意されていて、エラーやメッセージを簡単に記録できます。log.Printlnを使うとメッセージを日時と一緒に出力してくれます。

日時とは、「いつ」問題が起きたかを記録する大切な情報です。これがあると後でログを見返したときに便利です。


import (
    "log"
)

func main() {
    err := doSomething()
    if err != nil {
        log.Println("エラーが発生しました:", err)
    }
}

func doSomething() error {
    return fmt.Errorf("何か問題が起きました")
}

2. ログの出力先を変えて整理する

2. ログの出力先を変えて整理する
2. ログの出力先を変えて整理する

ログは画面に表示するだけでなく、ファイルに保存することも大切です。ファイルにログを書けば、後からじっくり調べられます。

標準のlogパッケージでは、出力先を自由に変えられるので、ログファイルを作ってそこに書き込むことができます。


import (
    "log"
    "os"
)

func main() {
    file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    log.SetOutput(file)

    err = doSomething()
    if err != nil {
        log.Println("エラー:", err)
    }
}

3. ログにレベルをつけて分ける

3. ログにレベルをつけて分ける
3. ログにレベルをつけて分ける

ログには「情報」「警告」「エラー」などのレベルがあります。たとえば、軽い注意だけなら「警告(Warning)」、大きな問題なら「エラー(Error)」と分けると、どれが重要かすぐわかります。

Goの標準logパッケージにはレベル機能がありませんが、レベル別にログを整理したいなら、logruszapなどの便利な外部ライブラリを使う方法があります。

外部ライブラリは最初は難しく感じるかもしれませんが、将来的にログをもっと管理したい場合に役立ちます。

4. ログを見やすくする工夫

4. ログを見やすくする工夫
4. ログを見やすくする工夫

ログにはタイムスタンプ(時間の記録)があると便利ですが、もう一歩進んで、エラー発生箇所のファイル名や行番号も一緒に出せると、問題を素早く見つけられます。

標準logパッケージではlog.SetFlagsでこれらの表示を設定できます。


import (
    "log"
)

func main() {
    // 日時、ファイル名、行番号を表示
    log.SetFlags(log.LstdFlags | log.Lshortfile)

    log.Println("ここでエラーが起きました")
}

5. 複数の情報を一度にログ出力する

5. 複数の情報を一度にログ出力する
5. 複数の情報を一度にログ出力する

エラーだけでなく、処理の進み具合や変数の中身をログに残すこともよくあります。これにより、プログラムの状態を詳しく把握できます。

ログには文字列だけでなく、数字や変数の値を組み合わせて書きます。log.Printfを使うと書式を指定して分かりやすく出力できます。


import (
    "log"
)

func main() {
    count := 5
    log.Printf("現在のカウントは %d です", count)
}

6. 覚えておきたいポイント

6. 覚えておきたいポイント
6. 覚えておきたいポイント

ログの整理はトラブル解決に欠かせません。Goの標準logパッケージを使って日時と一緒に記録し、必要に応じてファイル出力やファイル名・行番号の表示を使いましょう。

将来的にはレベル分けや外部ライブラリの利用も検討するとより便利になります。ログはプログラムの健康診断のようなもの。しっかり記録して問題を早く見つけましょう!

まとめ

まとめ
まとめ

ログ管理の重要性と初心者が理解しておきたい基本

Go言語でログを整理して出力することは、ただエラーを眺めるだけではなく、プログラム全体の状態を把握し、どこで何が起きているのかを正確に追跡するための大切な手がかりになります。ログは、開発中だけでなく運用中にも役に立つ情報源であり、細かな挙動を後から確認できる“記録の履歴書”のような存在です。初心者の方でも、ログを活用する習慣を身につけることで、プログラムの品質や安全性が大きく向上します。 特に、時刻の記録、エラー内容の整理、ファイルへの保存、レベルごとの整理などは、基本でありながら奥が深いポイントです。慌てず一歩ずつ理解していけば、自然と実務でも役に立つログ管理ができるようになります。

初心者向け!最もシンプルなログ出力の例

下のサンプルは、Go言語で「エラーが発生したらログに記録する」という基本中の基本の流れを丁寧にまとめたものです。まずはこの形を理解しておくことが、ログ管理の第一歩となります。


package main

import (
    "log"
    "os"
    "fmt"
)

func main() {
    // ログファイルを準備する
    file, err := os.OpenFile("simple.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        fmt.Println("ログファイルを開けませんでした:", err)
        return
    }
    defer file.Close()

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

    // テスト用の処理
    err = doSomething()
    if err != nil {
        log.Println("エラー内容:", err)
    } else {
        log.Println("処理は正常に完了しました")
    }
}

func doSomething() error {
    // 仮のエラーを返す
    return fmt.Errorf("テスト用のエラーが発生しました")
}

このサンプルでは、ログを画面ではなくファイルに保存する方法を示しています。「何が起きたか」を残すだけでなく、「いつ発生したか」も自動的に記録されるため、後から読み返したときに状況を把握しやすくなります。最初は難しく見えるかもしれませんが、プログラムを実行してファイルを覗いてみると、動作がとてもよく理解できます。

ログを読みやすく整えるコツと深めたい学習ポイント

ログをただ出力するだけでは、情報が散らばってしまい、いざ調べるときに大変です。そこで、ログ内容に「日時」「発生場所」「重要度」などの情報を付けて整理しておくと、作業がぐっと楽になります。標準パッケージだけでも、log.SetFlagsを使ってファイル名や行番号を表示させるなど、かなり見やすく整えることができます。 また、複数のエラーや動作状況を同時に出力するときは、書式を指定して見やすくできるlog.Printfが便利です。状況に応じて必要な情報をログに残す習慣を身につけることで、問題の特定がスムーズになり、後続の作業効率が大きく改善します。

先生と生徒の振り返り会話

生徒

「ログってただのメモみたいなものだと思っていましたが、こんなにたくさんの使い方があるんですね!」

先生

「そうなんです。ログを上手に使えるようになると、プログラムがどんな状態なのかがすぐに分かるようになりますよ。エラーの調査もぐっと楽になります。」

生徒

「ログの保存先を変えたり、行番号を出したりできるのも便利ですね。難しそうに見えて意外とシンプルでした。」

先生

「その気づきはとても大事です。最初は基本からで十分ですが、少し慣れてきたらログレベルを導入したり、外部ライブラリにも挑戦してみると良いですよ。ログはプログラムと一緒に成長する知識ですからね。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの構文ルールまとめ!インデント・セミコロンなど初心者が最初に覚えるべきポイント
New2
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
New3
Kotlin
KotlinでHello Worldを表示するには?最初の1行を実行してみよう
New4
Go言語
Go言語の依存関係管理を始めよう!go modの基本設定と導入手順
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.2
Java&Spring記事人気No2
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.3
Java&Spring記事人気No3
Kotlin
KotlinのAPI通信でGETリクエストを送る方法!初心者向け徹底ガイド
No.4
Java&Spring記事人気No4
Swift
SwiftのURLSessionでのネットワークエラー対策!再試行とタイムアウトを初心者向けに解説
No.5
Java&Spring記事人気No5
Go言語
Go言語のテストでタイムアウト・並行処理を扱うポイント
No.6
Java&Spring記事人気No6
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.8
Java&Spring記事人気No8
Swift
Swift JSONデコード失敗の原因と対処|DecodingError徹底解説