この辺りは未知の法則に支配されているようだ。なかなか面白い、少し書き留めておこう。
WindowsでC#という名の魔法を学び始めた、若き冒険者のあんたへ。
デバッグといえばConsole.WriteLine。とても便利で、頼りになる呪文だ。しかし、少し複雑な迷宮に挑み始めると、その呪文が、いつしかあんた自身を縛る「呪い」へと変わることに気づくはずだ。
「デバッグが終わったら、大量のWriteLineを消すのが面倒…」 「エラーが起きた時だけ、魂の叫びを記録したいのに…」 「コンソールという名の幻は、閉じれば二度と見られない…」
真実を教えよう。デキる冒険者は、Console.WriteLineという名の木の棍棒で、巨大なドラゴンと戦ったりはしない。
彼らは「ロギングライブラリ」という専用の武具を使いこなす。その中でも、多くの熟練者に愛用されているのが、「NLog」という名の、伝説の聖剣だ。
この羊皮紙には、あんたがその木の棍棒を捨て、聖剣を手に取り、真の冒険者への第一歩を踏み出すための、全ての儀式を記した。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 砂漠の道標
- 第一の儀式:祭壇の準備(Visual Studioでプロジェクト作成)
- 第二の儀式:聖剣の召喚(NLogの導入)
- 第三の儀式:聖剣の鞘を設える(NLog.configの作成)
- 第四の儀式:聖剣を振るう(C#コード)
- 最終儀式:三つの世界に響く、魂の叫び
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
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.configの作成)
ここが、NLogの真髄だ。聖剣の力は、コードの外にある「設定ファイル(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という真実の鏡には、色鮮やかな光の軌跡が映し出されるだろう。
羊皮紙を巻く前に
Console.WriteLineという木の棍棒と、NLogという聖剣。その違いは、もはや明らかだ。
あんたは、この儀式を通じて、真のロギングシステムの力を手に入れた。設定ファイル一つで出力先を自在に操り、ログレベルで情報を選別し、本番環境でも開発環境でも同じコードで異なる振る舞いを実現できる。これが、プロフェッショナルという名の高みへの、第一歩だ。
NLogという聖剣が授ける五つの力
- 設定の柔軟性 - コードを変更せず、設定ファイルだけで出力先や形式を自由に変更可能
- 出力先の豊富さ - ファイル、コンソール、外部ツール、データベースなど多様な出力先に対応
- ログレベル管理 - Trace~Fatalまで6段階で重要度を制御し、必要な情報だけを記録
- パフォーマンス - 非同期書き込みやバッファリングで、アプリケーションの速度を損なわない
- 可読性の向上 - Log2Consoleなどのビューワで、色分けされた見やすいログを実現
まとめ
本格的なアプリケーション開発という、広大な世界へようこそ。この羊皮紙が、あんたの旅の確かな一歩となることを願って。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
- NLog Project | 聖剣の公式な古文書
- NLog Configuration File | 鞘に刻むべき、呪文の詳細
- Log2Console 日本語対応版 | 私が呪いを解いた、真実の鏡
ラクダの独り言
ご主人が「木の棍棒は卒業だ!」なんて言って、やけにキラキラした剣を振り回している。俺に言わせりゃ、どんな立派な剣だろうと、当たらなきゃ意味がねえんだがな。まったく、人間ってのは、道具の見た目にこだわるもんだ。やれやれだぜ。