Bamba news

NLogの使い方を徹底解説!.NETでのロギング設定から実践まで

.NET開発に必須のロギングライブラリNLogの導入方法から設定、実践的な使い方までを初心者にも分かりやすく解説。ファイル出力、ログレベル、ローテーションなど、NLogを使いこなすための情報を網羅し、効果的なログ管理を実現します。

Tags:#開発

NLogとは?プログラムの動きを記録する便利な道具

NLogは、.NET(ドットネット)という開発環境で作られたアプリケーションの動きを記録(ロギング)するための、非常に人気のあるオープンソースのライブラリです。プログラムが「いつ」「どこで」「何をしたか」を記録することで、開発中の問題発見や、運用開始後のエラー追跡が格段に楽になります。

NLogが多くの開発者に選ばれる理由は、その柔軟性と高い性能にあります。

  • 多彩な出力先: 記録したログを、テキストファイルはもちろん、画面(コンソール)、データベース、Eメールなど、さまざまな場所に出力できます。状況に応じて最適な出力先を選べるのが大きな魅力です。
  • 自由なフォーマット設定: ログに「いつ(日時)」「どのくらいの重要度か(ログレベル)」「プログラムのどの部分か」「どんな内容か」といった情報を、好きな形式で記録できます。
  • 便利な追加機能: ログをため込みすぎないように自動でファイルを新しくしたり(ローテーション)、大量のログを効率よく書き込んだり(非同期ロギング)、後から分析しやすい形式で記録したり(構造化ログ)といった、高度な機能も備わっています。

このように、NLogは簡単な設定で高機能なログ管理を実現できるため、小規模な開発から大規模なシステムの運用まで、幅広い場面で活躍します。

NLogを使ってみよう!導入から基本的な使い方まで

それでは、実際にNLogをプロジェクトに導入し、ログを出力するまでの手順を順を追って見ていきましょう。ここでは、開発ツールのVisual Studioを使った基本的な流れを解説します。

1. 必要な部品(NuGetパッケージ)をインストールする

まず、あなたのプロジェクトでNLogを使えるように、必要な部品をインストールします。Visual StudioにはNuGetパッケージマネージャーという便利な機能があり、これを使って簡単に追加できます。

  1. Visual Studioでプロジェクトを開きます。
  2. 「ソリューションエクスプローラー」でプロジェクト名を右クリックし、「NuGetパッケージの管理」を選択します。
  3. 「参照」タブで以下の3つのパッケージを検索し、それぞれインストールします。
    • NLog: NLog本体です。これがなければ始まりません。
    • NLog.Config: 設定ファイルをプロジェクトに追加し、基本的なテンプレートを自動で作成してくれます。
    • NLog.Schema: 設定ファイルを書く際に、入力候補を表示してくれるなど、編集をサポートしてくれます。

これらのパッケージをインストールすると、プロジェクト内に NLog.config という名前のファイルが自動的に作成されます。このファイルが、NLogの動作を細かく設定するための設計図になります。

2. 設定ファイル(NLog.config)を編集する

次に、先ほど作成された NLog.config ファイルを編集して、ログを「どこに」「どのような形式で」出力するかを設定します。このファイルはXMLという形式で書かれています。

以下は、ログを「コンソール画面」と「ファイル」の両方に出力するための基本的な設定例です。

<?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"
      throwConfigExceptions="true"
      internalLogLevel="Off"
      internalLogFile="./logs/nlog_internal.log">

  <targets>
    <target name="logFile" xsi:type="File" fileName="logs/app.log"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
    <target name="logConsole" xsi:type="Console"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logFile,logConsole" />
  </rules>
</nlog>

この設定のポイントは2つです。

  • <targets>: ここでログの出力先を定義します。上記の例では logFile(ファイルへ出力)と logConsole(コンソール画面へ出力)という2つの出力先を設定しています。layout という部分で、日付|ログレベル|場所|メッセージ という形式で出力するように指定しています。
  • <rules>: ここで「どのログを」「どこに出力するか」というルールを決めます。上記の例では、「すべての場所(name="*")」から発信される「Infoレベル以上(minlevel="Info")」のログを、「logFilelogConsoleの両方(writeTo="logFile,logConsole")」に出力するように設定しています。

3. プログラムのコードからログを出力する

設定が完了したら、いよいよプログラムのコードから実際にログを出力してみましょう。

using NLog;

class Program
{
    // このクラス専用のロガー(ログを書き出す人)を用意する
    private static readonly Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        // Infoレベルのログを出力
        logger.Info("アプリケーションが開始されました。");

        try
        {
            // Debugレベルのログを出力
            logger.Debug("デバッグメッセージ: これから計算処理を開始します。");

            // わざとエラーを発生させるコード
            int zero = 0;
            int result = 10 / zero;
        }
        catch (Exception ex)
        {
            // Errorレベルのログを出力(例外情報も一緒に記録)
            logger.Error(ex, "計算処理中にエラーが発生しました。");
        }
        finally
        {
            // アプリケーション終了時にInfoレベルのログを出力
            logger.Info("アプリケーションが終了しました。");
        }
    }
}

このコードを実行すると、NLog.config の設定に従って、コンソール画面と logs/app.log というファイルにログが出力されます。エラーが発生した場合には、その内容もしっかり記録されるため、問題の原因究明に大いに役立ちます。

ログレベルを使い分けて情報を整理する

NLogには、情報の重要度に応じて使い分ける「ログレベル」という概念があります。これにより、普段は「一般的な情報」だけを見て、問題が発生したときには「詳細なデバッグ情報」や「エラー情報」を確認するといった使い分けができます。

主なログレベルは以下の通りです。下に行くほど重要度が高くなります。

  • Trace: 最も詳細なログ。プログラムのステップを一つひとつ追うような、非常に細かい情報を記録します。
  • Debug: 開発中のデバッグに役立つ情報。変数の値の確認などに使います。
  • Info: 一般的な情報。プログラムの起動・終了や、重要な処理の開始・完了など、通常の動作状況を記録します。
  • Warn: 警告。すぐには問題にならないものの、注意が必要な状況を記録します。
  • Error: エラー。処理の続行は可能ですが、何らかのエラーが発生したことを記録します。
  • Fatal: 致命的なエラー。プログラムがこれ以上動作を続けられないような、深刻な問題が発生したことを記録します。

NLog.config<rules>minlevel="Info" と設定した場合、それよりも重要度の高い Warn, Error, Fatal のログも自動的に出力されますが、DebugTrace のログは出力されません。開発中は minlevel="Debug" にして詳細な情報を得て、運用時には minlevel="Info" に戻す、といった運用が一般的です。

さらに便利に!ログファイルの自動管理(ローテーション)

アプリケーションを長期間動かしていると、ログファイルがどんどん大きくなり、ディスクの容量を圧迫したり、ファイルを開くのに時間がかかったりするようになります。

NLogには、この問題を解決するための「ローテーション」と「アーカイブ」という機能があります。NLog.config を少し書き換えるだけで、ログファイルを日付ごとやサイズごとに自動で分割し、古いファイルを別の場所に保管(アーカイブ)できます。

以下は、ログファイルを1日ごとに作成し、古いログは最大10個までアーカイブとして保存する設定例です。

<target name="logFile" xsi:type="File"
        fileName="logs/app-${shortdate}.log"
        archiveFileName="logs/archive/app-${shortdate}.{#}.log"
        archiveEvery="Day"
        archiveNumbering="Rolling"
        maxArchiveFiles="10"
        layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />

この設定のポイントは以下の通りです。

  • fileName="logs/app-${shortdate}.log": ファイル名に ${shortdate} という特殊な変数を使い、「app-2025-06-07.log」のように日付を含んだファイル名にします。
  • archiveEvery="Day": ログファイルを切り替えるタイミングを「日ごと」に設定します。
  • archiveFileName="...": 古くなったログファイルの保存先と名前のルールを指定します。
  • maxArchiveFiles="10": 保管しておくアーカイブファイルの最大数を10個に制限します。11個目ができた時点で、一番古いものが自動的に削除されます。

これにより、手動で古いログファイルを整理する手間が省け、ログ管理が非常に楽になります。

その他の設定方法

これまで NLog.config というXMLファイルで設定する方法を紹介してきましたが、特にASP.NET Coreのようなモダンなアプリケーションでは、appsettings.json というJSON形式のファイルに設定を記述する方法も一般的です。

設定の考え方は基本的に同じですが、書き方が異なります。どちらの方法を使うかはプロジェクトの構成や慣習によりますが、NLogが多様な設定方法に対応していることを覚えておくと良いでしょう。

まとめ

NLogは、.NETアプリケーション開発におけるログ管理を強力にサポートしてくれる、非常に頼もしいライブラリです。最初は設定ファイルの書き方に少し戸惑うかもしれませんが、一度基本を覚えてしまえば、その柔軟性と便利さの虜になることでしょう。

効果的なロギングは、バグの少ない高品質なアプリケーションを開発し、安定した運用を続けるための鍵となります。ぜひあなたのプロジェクトにNLogを導入して、その力を実感してみてください。

お仕事のご依頼・ご相談はこちら

フロントエンドからバックエンドまで、アプリケーション開発のご相談を承っております。
まずはお気軽にご連絡ください。

関連する記事

Jenkins vs. GitHub Actions vs. GitLab CI: 最適なCI/CDツールはどれ?【2025年最新版】

CI/CDツールの三大巨頭、Jenkins、GitHub Actions、GitLab CIを徹底比較。それぞれの特徴、メリット・デメリット、そしてあなたのプロジェクトに最適なツールの選び方を、初心者にも分かりやすく解説します。

geometry3Sharpとは?C#で使える強力な3Dジオメトリ計算ライブラリを徹底解説

C#で3Dメッシュ処理や幾何計算を行いたい開発者必見!オープンソースライブラリ「geometry3Sharp」の機能、特徴、使い方、活用例をわかりやすく解説します。ゲーム開発、CAD、3Dプリンティング分野で役立ちます。

BootSharpとは?.NETをJavaScript環境で動かす新定番!使い方やBlazorとの違いを解説

BootSharpを使えば、C#で書いたコードをWebAssemblyを介してブラウザなどのJavaScript環境で簡単に実行できます。この記事では、BootSharpの基本的な使い方、Blazorとの違い、具体的な活用例を初心者にも分かりやすく解説します。UIフレームワークに縛られず、.NETのパワーをWebで活かしたい開発者必見です。

C#で動的コード実行!ExpressionEvaluatorライブラリを徹底解説

C#アプリケーションに、設定ファイルやユーザー入力から動的に数式評価やロジック実行機能を組み込みたいと思ったことはありませんか?本記事では、強力なC#ライブラリ「ExpressionEvaluator」について、その基本から応用まで、具体的なコード例を交えて詳しく解説します。

C++ Armadilloライブラリ徹底解説:インストールから実践的使い方まで

C++で高度な線形代数計算を簡単かつ高速に行いたいですか?この記事では、強力なC++ライブラリ「Armadillo」のインストール方法から、行列やベクトルの基本的な操作、連立一次方程式の解法、統計計算といった実践的な使い方まで、豊富なコード例と共に詳しく解説します。科学技術計算や機械学習の実装に役立つ知識を身につけましょう。