以下の内容はhttps://devlights.hatenablog.com/entry/2025/09/24/073000より取得しました。


Goメモ-620 (Go 1.25でslog.RecordにSourceメソッドが追加)(ファイルパス, 関数, 行数)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れない内にメモメモ。。。

以下の記事で知りました。感謝m( )m

zenn.dev

Go1.25でslog.Record.Sourceが追加されたみたいですね。

slog.Recordは自前のハンドラを作成する際に利用する構造体です。

サンプル

main.go

package main

import (
    "context"
    "fmt"
    "log/slog"
    "os"
    "path/filepath"
    "time"
)

type (
    myHandler struct {
        handler slog.Handler
    }
)

func (me *myHandler) Handle(ctx context.Context, r slog.Record) error {
    var (
        // Go 1.25 から追加された
        // REF: https://pkg.go.dev/log/slog@go1.25.1#Record.Source
        source = r.Source()
    )
    if source == nil {
        return nil
    }

    var (
        f   = filepath.Base(source.File) // ファイルパス (そのままだとフルパス)
        fn  = source.Function            // 関数
        l   = source.Line                // 行
        msg = r.Message
    )
    fmt.Printf("%s:%s:%d\t%s\n", f, fn, l, msg)

    return nil
}

func (me *myHandler) Enabled(ctx context.Context, l slog.Level) bool {
    return me.handler.Enabled(ctx, l)
}

func (me *myHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
    return &myHandler{handler: me.handler.WithAttrs(attrs)}
}

func (me *myHandler) WithGroup(name string) slog.Handler {
    return &myHandler{handler: me.handler.WithGroup(name)}
}

func main() {
    if err := run(); err != nil {
        slog.Error("failed to run", "error", err)
        os.Exit(1)
    }
}

func run() error {
    var (
        v = &slog.LevelVar{}
        o = &slog.HandlerOptions{
            Level:     v,
            AddSource: true,
        }
        w = os.Stderr
        h = &myHandler{handler: slog.NewTextHandler(w, o)}
        l = slog.New(h)
    )
    l.Info("Start")
    {
        time.Sleep(1 * time.Second)
        v.Set(slog.LevelWarn)
    }
    l.Info("End")

    return nil
}

実行結果

$ task
task: [default] go run .
main.go:main.run:69     Start

参考情報

pkg.go.dev

future-architect.github.io

tip.golang.org

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2025/09/24/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14