たびとの旅路 ~電脳砂漠の冒険譚~

フロッピー頼りに歩き、クラウドの地平を見つめる今日まで。見つけたオアシス、迷い込んだ砂の迷宮、全てこの羊皮紙に。

そのWriteLineは、呪いの言葉 ~なぜNLogという聖剣を選ぶのか~

この辺りは未知の法則に支配されているようだ。なかなか面白い、少し書き留めておこう。

WindowsでC#という名の魔法を学び始めた、若き冒険者のあんたへ。 デバッグといえばConsole.WriteLine。とても便利で、頼りになる呪文だ。しかし、少し複雑な迷宮に挑み始めると、その呪文が、いつしかあんた自身を縛る「呪い」へと変わることに気づくはずだ。

「デバッグが終わったら、大量のWriteLineを消すのが面倒…」 「エラーが起きた時だけ、魂の叫びを記録したいのに…」 「コンソールという名の幻は、閉じれば二度と見られない…」

真実を教えよう。デキる冒険者は、Console.WriteLineという名の木の棍棒で、巨大なドラゴンと戦ったりはしない。 彼らは「ロギングライブラリ」という専用の武具を使いこなす。その中でも、多くの熟練者に愛用されているのが、「NLog」という名の、伝説の聖剣だ。 この羊皮紙には、あんたがその木の棍棒を捨て、聖剣を手に取り、真の冒険者への第一歩を踏み出すための、全ての儀式を記した。

この羊皮紙のあらまし

この羊皮紙が導く者

  • Console.WriteLineという木の棍棒でのデバッグから卒業したい、若き冒険者
  • 本格的なログ管理システムの構築を学びたい、中級の魔法使い
  • 既存プロジェクトへのNLog導入を検討している、実務の戦士
  • ログファイル、コンソール、外部ツールへの多重出力を実現したい開発者
  • 設定ファイルによる柔軟なログ制御に興味を持つ、全ての探求者

砂漠の道標

  • NLog - .NETアプリケーション向けの強力なロギングライブラリ。柔軟な設定と多様な出力先が特徴。
  • ロギングライブラリ - プログラム実行中の情報を記録するための専用ツール。Console.WriteLineの進化系。
  • NLog.config - NLogの動作を制御する設定ファイル。コードを変更せずにログ出力を調整可能。
  • ログレベル - ログの重要度を示す段階(Trace, Debug, Info, Warn, Error, Fatal)。
  • Target - ログの出力先。ファイル、コンソール、外部ツールなど複数指定可能。
  • Log2Console - ログをリアルタイムで色分け表示するビューワツール。デバッグ効率を劇的に向上。
  • NuGet - .NETライブラリの配布・管理システム。Visual Studioから簡単にパッケージ導入可能。

第一の儀式:祭壇の準備(Visual Studioでプロジェクト作成)

まずは、魔法を詠唱するための祭壇を築く。Visual Studio 2019という名の魔法の工房で、.NET 5のコンソールアプリケーションを創造する。

プロジェクト名を入力する

新たな冒険の始まりを、ここに宣言する

第二の儀式:聖剣の召喚(NLogの導入)

次に、NuGetという名の宝物庫から、NLogという聖剣を、あんたのプロジェクトへと召喚する。

NLog をインストールする

伝説の聖剣を、我が手にする

第三の儀式:聖剣の鞘を設える(NLog.configの作成)

ここが、NLogの真髄だ。聖剣の力は、コードの外にある「設定ファイル(NLog.config)」という名の鞘によって、その輝きも、振るう方向も、自由自在にコントロールできる。 NLog.configという名の鞘を創り、ビルド時に実行ファイルの隣にコピーされるよう、プロパティを設定する。

NLog.config のプロパティを変更する

聖剣を収める、魔法の鞘を設える

そして、その鞘に、以下の呪文を一字一句違わずに刻み込むのだ。これで、魂の叫び(ログメッセージ)は、ファイル、コンソール(画面表示)、そしてLog2Console(外部ビューワ)という三つの世界へ、同時に響き渡ることになる。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Off" internalLogFile="../logs/nlog_internal.log">

  <targets>
    <!-- 1. ファイル出力設定 -->
    <target name="logFile" xsi:type="File"
      encoding="UTF-8"
      writeBom="true"
      lineEnding="Default"
      layout="${longdate} ${level:uppercase=true:padding=-5} [${threadid}] ${logger} - ${message} ${exception:format=tostring}"
      fileName="../logs/${processname}.log"
      archiveFileName="../logs/backup/${processname}_{###}.log"
      archiveEvery="Day"
      archiveNumbering="Sequence"
      maxArchiveFiles="10" />

    <!-- 2. コンソール出力設定 -->
    <target name="console" xsi:type="ColoredConsole" 
      layout="${longdate} ${level:uppercase=true:padding=-5} ${message}" />

    <!-- 3. ビューワ(Log2Consoleなど)への出力設定 -->
    <target name="tcpOutlet" xsi:type="NLogViewer" 
      address="tcp4://localhost:4505"/>
  </targets>
  
  <rules>
    <!-- 全ての叫びを、三つの世界へ -->
    <logger name="*" minlevel="Trace" writeTo="logFile" />
    <logger name="*" minlevel="Trace" writeTo="console" />
    <logger name="*" minlevel="Trace" writeTo="tcpOutlet" />
  </rules>
</nlog>

第四の儀式:聖剣を振るう(C#コード)

いよいよ、聖剣を手に取り、その力を振るう時だ。Program.csに、以下の呪文を記す。

using System;

namespace NLogSample
{
    class Program
    {
        // 聖剣を手にする
        private static readonly NLog.Logger _logger = NLog.LogManager.GetCurrentClassLogger();

        static void Main(string[] args)
        {
            // 聖剣の力を、様々なレベルで解き放つ
            _logger.Trace("Trace ログです。");
            _logger.Debug("Debug ログです。");
            _logger.Info("Info ログです。");
            _logger.Warn("Warn ログです。");
            _logger.Error("Error ログです。");
            _logger.Fatal("Fatal ログです。");

            // 例外という名の悪霊を、聖剣で断ち切る
            try { var a = 0; var b = 10 / a; }
            catch (Exception ex) { _logger.Error(ex, "意図的なエラーが発生しました。"); }
        }
    }
}

最終儀式:三つの世界に響く、魂の叫び

さあ、デバッグ実行(F5)で、儀式を完遂させよう。 コンソールには魂の叫びが木霊し、ログファイルには詳細な記録が刻まれ、そしてLog2Consoleという真実の鏡には、色鮮やかな光の軌跡が映し出されるだろう。

Log2Console へのログ出力を確認する

真実の鏡に映る、聖剣の輝き

Log2Console 日本語対応版

羊皮紙を巻く前に

Console.WriteLineという木の棍棒と、NLogという聖剣。その違いは、もはや明らかだ。

あんたは、この儀式を通じて、真のロギングシステムの力を手に入れた。設定ファイル一つで出力先を自在に操り、ログレベルで情報を選別し、本番環境でも開発環境でも同じコードで異なる振る舞いを実現できる。これが、プロフェッショナルという名の高みへの、第一歩だ。

NLogという聖剣が授ける五つの力

  1. 設定の柔軟性 - コードを変更せず、設定ファイルだけで出力先や形式を自由に変更可能
  2. 出力先の豊富さ - ファイル、コンソール、外部ツール、データベースなど多様な出力先に対応
  3. ログレベル管理 - Trace~Fatalまで6段階で重要度を制御し、必要な情報だけを記録
  4. パフォーマンス - 非同期書き込みやバッファリングで、アプリケーションの速度を損なわない
  5. 可読性の向上 - Log2Consoleなどのビューワで、色分けされた見やすいログを実現

まとめ

本格的なアプリケーション開発という、広大な世界へようこそ。この羊皮紙が、あんたの旅の確かな一歩となることを願って。

おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。

砂漠で見つけた魔法のランプ

ラクダの独り言

ご主人が「木の棍棒は卒業だ!」なんて言って、やけにキラキラした剣を振り回している。俺に言わせりゃ、どんな立派な剣だろうと、当たらなきゃ意味がねえんだがな。まったく、人間ってのは、道具の見た目にこだわるもんだ。やれやれだぜ。