プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

C# NLogによるログ設定

■環境

OS:Windows

言語:C♯

DB:SQL Server

フレームワーク:.NET Framework4.8

 
 


■NLogをインストール

①「プロジェクト」⇒「NuGetパッケージの管理」⇒「参照」を押下
②「nlog.config」をインストール
 

 

 
 


■ログ設定ファイルの作成

「NLog」をインストールすると「NLog.config」が作成されるので下記を記述する

①「<targets>」ディレクティブ

・ターゲット名:name="infoLog"
 
・出力タイプ:xsi:type="File"
⇒ファイルに設定
 
・ファイルのフルパス:fileName="Logs\info\info.log"
⇒プロジェクト配下の「Logs\info」に「info.log」ファイルを作成
 
・ファイル内容フォーマット:layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${message}"
⇒「YYYY-MM-DD HH:MM:SS + ログ内容」をフォーマットにする
 

②「<rules>」ディレクティブ

・ログ名:⇒logger name="*"
 
・ログレベル:minlevel="Info"
・ログレベル:minlevel="Error"
 
・書き込み先:writeTo="infoLog"
・書き込み先:writeTo="errLog"
 
 

<?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">

  <variable name="myvar" value="myvalue"/>

  <targets>
    <target name="infoLog" xsi:type="File" fileName="Logs\info\info.log" layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${message}"></target>
    <target name="errLog" xsi:type="File" fileName="Logs\error\error.log" layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${message}"></target>
  </targets>

  <rules>
    <logger name="*" minlevel="Info" writeTo="infoLog"></logger>
    <logger name="*" minlevel="Error" writeTo="errLog"></logger>
  </rules>
</nlog>

 
 


■ログ用のインスタンスを作成してログを出力

インスタンス作成

private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

 
 

logger.Info()等でログを出力

logger.Info("[ログ内容]");
logger.Error("[ログ内容]");

 
 


■サンプルソース

下記で作成したソースコードにログ出力を設定する

C# DapperでDB接続する方法(トランザクション編)

 
 

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using DbConnection.Models;
using Dapper;

namespace DbConnection.Controllers
{
    public class SampleController : ApiController
    {
        //ログのインスタンス
        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        public void Get()
        {
            //接続文字列
            //string connectionStr = @"Server=[サーバー名];Database=[データベース名];Trusted_Connection=True;";
            string connectionStr = @"Server=localhost;Database=sqlserver;Trusted_Connection=True";

            using (var connection = new SqlConnection(connectionStr))
            {
                //DB接続
                connection.Open();

                //クエリ
                var query = "INSERT INTO test VALUES (@Id, @Name)";

                //パラメーター
                var param = new Test()
                {
                    Id = 1
                    , Name = "test1"
                };

                //トランザクション開始
                using (var tran = connection.BeginTransaction())
                {
                    try
                    {
                        //クエリ実行
                        var retCd = connection.Execute(query, param, tran);

                        //コミット
                        tran.Commit();

                        //インフォログ出力
                        logger.Info("コミット完了");
                    } catch (Exception e)
                    {
                        //ロールバック
                        tran.Rollback();

                        //エラーログ出力
                        logger.Error("エラー内容:" + e);
                        logger.Error("ロールバック完了");
                    } finally
                    {
                        //明示的なDB切断
                        connection.Close();
                    }
                }
            }
        }
    }
}