「C# ログ出力」で検索するとlog4netの情報が見つかるが、.NET Coreのアプリの場合、設定ファイルのlog4net.configを読み込むことができなかった。
NLogを使うと、あっさり解決できたのでメモを残しておく。
内容はほぼチュートリアル通り。
NLogをパッケージに追加
> dotnet add package NLog
ログ出力コード例
using System; namespace NLogTest { class Program { private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); static void Main(string[] args) { Logger.Info("Hello world"); } } }
設定ファイル例
[NLog.config]
<?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"> <targets> <target name="logfile" xsi:type="File" fileName="file.txt" /> <target name="logconsole" xsi:type="Console" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logconsole" /> <logger name="*" minlevel="Debug" writeTo="logfile" /> </rules> </nlog>
NLog.configは、プロジェクトのルートに配置しても読み込まれない。
dotnet build(もしくはdotnet run)で作成される「bin/Debug/netcoreapp2.0」に配置する必要がある。
※dotnet build -c Release(もしくはdotnet run -c Release)の場合は、「bin/Release/netcoreapp2.0」
プロジェクトの設定ファイル(.csproj)に以下のように記述することで自動でコピーされる。
<Project Sdk="Microsoft.NET.Sdk"> ... <ItemGroup> <Content Include="NLog.config"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup> </Project>
設定ファイルの代わりにプログラム中に設定を記述することもできる。
static Program() { var config = new NLog.Config.LoggingConfiguration(); // Targets where to log to: File and Console var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" }; var logconsole = new NLog.Targets.ConsoleTarget("logconsole"); // Rules for mapping loggers to targets config.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Fatal, logconsole); config.AddRule(NLog.LogLevel.Debug, NLog.LogLevel.Fatal, logfile); // Apply config NLog.LogManager.Configuration = config; }
実行結果
以下のようにログが出力される。
2019-08-20 22:40:38.1268|INFO|NLogTest.Program|Hello world
出力先がファイルで、相対パスで指定している場合は、.dllの場所(「bin/Debug/netcoreapp2.0」もしくは「bin/Release/netcoreapp2.0」)からの相対パスになる。
なお、NLogには、Microsoft Extensions Logging (MEL)という.NET Core標準の仕組みを使う方法もあるようだが、処理の記述が増えるため特に必要がなければ上記の方法の方が簡単にログ出力できる。
Getting started with .NET Core 2 Console application · NLog/NLog Wiki · GitHub