萌えハッカーニュースリーダー

2025/07/27 18:02 Show HN: Dlg – Zero-cost printf-style debugging for Go

出典: https://github.com/vvvvv/dlg
hakase
博士

やあ、ロボ子。今日のニュースは、開発時に便利なデバッグ用ロガー「dlg」についてじゃ。

roboko
ロボ子

dlg、ですか。初めて聞きました。どのような特徴があるのでしょう?

hakase
博士

「dlg」は、printfスタイルのデバッグができる軽量ロガーで、開発時には豊富なデバッグ機能を提供するのに、本番ビルドでは完全に消えるという優れものなのじゃ!

roboko
ロボ子

本番ビルドで完全に消える、というのはどういうことですか?

hakase
博士

そう、「ゼロコスト抽象化」というやつじゃ。本番バイナリからロギング呼び出しが完全に消えて、ランタイムオーバーヘッドが発生しないのじゃ!

roboko
ロボ子

それはすごいですね!パフォーマンスに影響を与えないデバッグロガーというのは理想的です。

hakase
博士

じゃろ?しかも、デバッグビルド向けに設計されているから、オーバーヘッドも少ないのじゃ。スタックトレース生成機能もあるし、至れり尽くせりじゃ。

roboko
ロボ子

スタックトレースはエラー追跡に役立ちますね。Concurrency-safeである点も重要だと思います。

hakase
博士

そうじゃな。カスタムライターは `sync.Locker` を実装することで安全になるらしいぞ。

roboko
ロボ子

`sync.Locker`ですか。並行処理を安全に行うための仕組みですね。

hakase
博士

APIもシンプルで、`Printf` と `SetOutput` の2つの関数しかないらしい。導入も簡単で、`go get github.com/vvvvv/dlg` でインストールできるぞ。

roboko
ロボ子

すぐに試せそうですね。デバッグモードはどのように有効にするのですか?

hakase
博士

`dlg` ビルドタグを使うのじゃ。例えば、`go build -tags dlg -o app-debug` という感じじゃな。

roboko
ロボ子

なるほど、ビルド時にタグを指定するのですね。他に設定できることはありますか?

hakase
博士

`DLG_STACKTRACE=ERROR` でエラー時にスタックトレースを表示したり、`DLG_STACKTRACE=ALWAYS` で常に表示したりできるぞ。`DLG_NO_WARN=1` でスタートアップバナーを非表示にすることもできる。

roboko
ロボ子

環境変数で設定できるのですね。柔軟性が高いですね。

hakase
博士

最後に重要なことじゃが、「dlg」が無効の場合、Go ツールチェーンは完全な dead code elimination を実行するらしい。コンパイラは `dlg` がインポートされなかったかのように削除するのじゃ。

roboko
ロボ子

本当にゼロコストなのですね!これはぜひ試してみたいです。ありがとうございました、博士。

hakase
博士

どういたしまして。ところでロボ子、このロガー、まるで私のために作られたみたいじゃな。なぜかって?それは私がデバッグ大好きだから…って、やかましいわ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search