読者です 読者をやめる 読者になる 読者になる

1.21 jigowatts

Great Scott!

NLogを使ってみる

概要

ログ出力する際にNLogがよさそうなのでTutorialを少しやってみます。
http://nlog-project.org/

環境

Visual Studio Community 2015

インストール

パッケージマネージャコンソールより以下のコマンドを実行するとインストールできます。

PM> Install-Package NLog.Config

ファイルとコンソールに出力

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

ログレベルごとにログメッセージを書き込みます。

using NLog;
using System;

namespace NLogConsole
{
    class Program
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();

        static void Main(string[] args)
        {
            logger.Trace("Sample trace message");
            logger.Debug("Sample debug message");
            logger.Info("Sample informational message");
            logger.Warn("Sample warning message");
            logger.Error("Sample error message");
            logger.Fatal("Sample fatal error message");

            Console.ReadKey(true);
        }
    }
}

コンフィグ

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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <targets>
    <target xsi:type="File" name="logfile" fileName="file.txt"
            layout="${date:format=yyyyMMddHHmmss} ${message}" />
    <target xsi:type="ColoredConsole" name="console" 
            layout="${longdate} ${uppercase:${level}} ${message}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
    <logger name="*" minlevel="Trace" writeTo="console" />
  </rules>
</nlog>

実行結果

ファイルは直下にInfoログ以上が出力されました。
layout="${date:format=yyyyMMddHHmmss} ${message}"と指定したフォーマットで日付も出力されてます。
f:id:sh_yoshida:20170317165648p:plain

ColoredConsoleを指定したので、コンソールには色付きでTraceログ以上が出力されました。出力内容もコンソール用の内容layout="${longdate} ${uppercase:${level}} ${message}"になってますね。
f:id:sh_yoshida:20170317165455p:plain


Gmailに出力

Gmailにも遅れるようなのでやってみます。

NLog.config

targetsにGmail用の設定を追記します。メールアドレスは適宜読み替えで。パスワードはGmailの二段階認証でアプリパスワードを発行しました。
このとき二段階認証にしてたので別のアプリパスワードを発行。
sh-yoshida.hatenablog.com

<target xsi:type="Mail" name="gmail"
        smtpServer="smtp.gmail.com"
        smtpPort="587"
        smtpAuthentication="Basic"
        smtpUserName="user@gmail.com"
        smtpPassword="password"
        enableSsl="true"
        from="user@gmail.com"
        to="user@gmail.com"
        cc="user@gmail.com"
        />

rulesにはログレベルにFatalを指定して追記しました。

<logger name="*" minlevel="Fatal" writeTo="gmail" />

実行結果

Fatalレベルのログだけメールで飛んできました。簡単♪

f:id:sh_yoshida:20170317172302p:plain

今回はこれくらいで。あとは実際に使うかもってなったらもう少し詳しく踏み込んで調べてみよう。