NLog はサードパーティ製のロガーであり、高機能で使いやすい。
NLog を使うためには、NLog パッケージを自分のプロジェクトにインストールしておく必要がある。dotnet コマンドを使う場合の例を下に示す。この時点の 5.3.2 は最新のバージョン番号である。
dotnet add package NLog -- version 5.3.2
ログの設定は XML で行うことができるが、コードでも可能である。
ログの設定ファイルは、NLog.config という名前で実行ファイルと同じフォルダに置いておく必要がある。
NLog.config の例を示す。これは、GitHub 上の NLog チュートリアルのものである。この例では Info 以上のレベルはコンソールとログファイルに、すべてのレベルがコンソールに出力される。
ログが出力されるファイルは、”file.txt” であるが、フルパスを指定していないので実行ファイルと同じ場所に出力される。
ログの出力フォーマットはデフォルトの形式であるが、target タグで layout 属性を指定すればログのフォーマットを設定できる。
<?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>
次のようなコードによりログの設定を行うこともできる。これは GitHub 上の NLog チュートリアルのものである。
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(LogLevel.Info, LogLevel.Fatal, logconsole);
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
// Apply config
NLog.LogManager.Configuration = config;
ログの出力は次のようなコードで行うことができる。この例は Info レベルで出力するが、例えば Logger.Error() を使うと Error レベルで出力される。レベルには他に Debug, Warn, Critical がある。
Logger.Info("Hello world");
完全な Program.cs のコード例を示す。
// NLog のテスト
// dotnet add package NLog --version 5.3.2
public static class Program
{
private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public static void Main(string[] args)
{
// ログの設定 (NLog.config を使わない場合)
if (args.Length > 0)
{
var config = new NLog.Config.LoggingConfiguration();
var logfile = new NLog.Targets.FileTarget("logfile") { FileName = @"C:\temp\nlogfile.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
config.AddRule(NLog.LogLevel.Debug, NLog.LogLevel.Info, logconsole);
config.AddRule(NLog.LogLevel.Debug, NLog.LogLevel.Fatal, logfile);
NLog.LogManager.Configuration = config;
}
// ログメソッドの実行
logger.Info("I: Hello world");
logger.Debug("D: Hello world");
logger.Error("E: Hello world");
logger.Warn("W: Hello world");
Console.WriteLine("Done.");
}
}
次に 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="C:\\temp\\nlogfile.txt" />
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
プロジェクトファイル (*.csproj) は次のようになっている。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="5.3.2" />
</ItemGroup>
</Project>