膨張空間

開発日記を中心に、時々雑記を投稿します。よろしく

NLogでEventLogを出力する最短方法

達成事項

  • C#のコンソールアプリやWindowsFormsなどでNLogを使ってEventLogを出力する

前提条件

まとめ

  1. NLogをインストールする
  2. paworshellのコマンドファイルを作成する
  3. batファイルを作成する
  4. batファイルを管理者で実行する
  5. App.ConfigにNLog用のターゲットを設定する
  6. コードを書く

1. NLogをインストールする

  1. プロジェクトを右クリックして「Nugetパッケージの管理」をクリックする f:id:gshota:20200217013510j:plain

  2. 参照タグからNLogを検索してインストールする f:id:gshota:20200217013355j:plain

2. paworshellのコマンドファイルを作成する

下記の内容とファイル名でコマンドファイルを新規作成する ファイル名「CreateEventLogSource.ps1

New-EventLog -LogName Application -Source "NLogTest"

ここに同じファイルを用意した。

3. batファイルを作成する

下記の内容とファイル名でコマンドファイルを新規作成する ファイル名「CreateEventLogSource.bat

powershell -NoProfile -ExecutionPolicy Unrestricted C:\CreateEventLogSource.ps1

ここに同じファイルを用意した。

失敗しない為のポイント

  • 「C:\CreateEventLogSource.ps1」の部分は絶対パスで指定すること

4. batファイルを管理者で実行する

  • 作成したCreateEventLogSource.batを右クリックしたメニューの「管理者として実行」をクリックする

5. App.ConfigにNLog用のターゲットを設定する

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        autoReload="true"
        throwExceptions="false">
    <targets>
      <target name="eventlog" xsi:type="EventLog" source="NLogTest" />
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" maxlevel="Fatal" writeTo="eventlog" />
    </rules>
  </nlog>
</configuration>

失敗しない為のポイント

  • 「configSections」は先頭に挿入する
  • targetsのsourceは2. paworshellのコマンドファイルを作成するで指定したSourceと同じにする

6. コードを書く

ここからソースをダウンロードできる。

using NLog;
using System;

namespace NlogEventLogSample
{
    internal static class Program
    {
        private static Logger Logger = LogManager.GetCurrentClassLogger();

        private static void Main(string[] args)
        {
            try
            {
                Logger.Info("Hello World");
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
    }
}

結果

  • イベントビュワーに正しく表示された

f:id:gshota:20200217013537j:plain

以上