アルパカのメモ

コンソールアプリでログ出力

概要

前提条件:

  • .NET Core 3.1
  • Visual Studio 2019 で開発

ASP.NET なら初めから使える(っぽい)ログ出力の機能を、コンソールアプリで使用する方法。

Microsoft.Extensions.Logging パッケージを使用するが、一番お手軽(と思われる)なファイルへの出力機能がない。 コンソール出力やイベントログへの出力はできる。

参考:.NET Core および ASP.NET Core でのログ記録 | Microsoft Docs

NuGet パッケージの追加

下記パッケージをプロジェクトに追加する。

Microsoft.Extensions.Logging

これと併せて、使用したいプロバイダー(出力先)ごとにパッケージを追加する。

  • Microsoft.Extensions.Logging.Console - コンソール
  • Microsoft.Extensions.Logging.EventLog - イベントログ
  • Microsoft.Extensions.Logging.ApplicationInsights - Azure の AppInsights
  • など

コンソールへログ出力

下記2つのパッケージをプロジェクトへ追加する。

Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Console

下記がロガーの準備とログ出力のサンプル。

using Microsoft.Extensions.Logging;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main(string[] args = null)
        {
            using var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                    .AddFilter("Microsoft", LogLevel.Warning)
                    .AddFilter("System", LogLevel.Warning)
                    .AddFilter("ConsoleApp1.Program", LogLevel.Debug)
                    .AddConsole();
            });
            ILogger logger = loggerFactory.CreateLogger<Program>();
            logger.LogInformation("Example log message");
        }
    }
}

このサンプルを実行すると、下記のログがコンソール上に出力される。

info: ConsoleApp1.Program[0]
      Example log message

イベントログへ出力

下記2つのパッケージをプロジェクトへ追加する。

Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.EventLog

下記がロガーの準備とログ出力のサンプル。

using Microsoft.Extensions.Logging;

namespace ConsoleApp1
{
    class Program
    {
        public static void Main(string[] args = null)
        {
            using var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                    .AddFilter("Microsoft", LogLevel.Warning)
                    .AddFilter("System", LogLevel.Warning)
                    .AddFilter("ConsoleApp1.Program", LogLevel.Debug)
                    .AddEventLog();
            });
            ILogger logger = loggerFactory.CreateLogger<Program>();
            logger.LogInformation("Example log message");
        }
    }
}

イベントビューアの「Windows ログ」→「Application」の中にログが記録される。

AddEventLog メソッドの引数でログのソース名などを指定できるが、ソースは事前に登録が必要。 登録するには、PowerShell のコマンドを実行するのが一番手っ取り早い方法と思われる。