子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

【C#】C#でLog4Netのファイルパスを取得する方法

C#でLog4Netのファイルパスを取得する方法についてです。
Log4Netを使ったときにどこにファイルが作成されるのか取得したい時があって、
それを調べる方法で詰まったのでメモ。

さっそくですが、プログラムは次のようになりました。
Windowsフォームアプリでサンプルを作ってみました。

Form1.cs

using log4net.Appender;
using log4net.Repository.Hierarchy;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsLogTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            //RootのLogger取得
            var rootLogger = ((Hierarchy)logger.Logger.Repository).Root;

            //RootのAppender取得
            var appender = rootLogger.GetAppender("logFileAbc") as FileAppender;

            //ファイル名取得
            var filepath = appender.File;
           
        }
    }
}

Appender取得を取得するところがApp.configのApenderのnameを設定する必要があるみたいです。

            //RootのAppender取得
            var appender = rootLogger.GetAppender("logFileAbc") as FileAppender;

では、App.configの全体です。

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <log4net>
    <appender name="logFileAbc" type="log4net.Appender.RollingFileAppender" >
      <File value=".\log\" />
      <DatePattern value='yyyyMMdd".log"' />
      <StaticLogFileName value="false" />
      <RollingStyle value="date" />
      <AppendToFile value="true" />
      <MaximumFileSize value="100MB" />
      <MaxSizeRollBackups value="30" />
      <layout type="log4net.Layout.PatternLayout">
        <ConversionPattern value="%date [%thread] [%-5level] (%method) - %message%n" />
      </layout>
    </appender>
    <filter type="log4net.Filter.LevelRangeFilter">
      <LevelMax value="FATAL" />
      <LevelMin value="DEBUG" />
    </filter>
    <root>
      <level value="Debug" />
      <appender-ref ref="logFileAbc" />
    </root>
  </log4net>
</configuration>

大事なのは次の箇所。
appender nameとappender-refのところです。

<appender name="logFileAbc" type="log4net.Appender.RollingFileAppender" >
<appender-ref ref="logFileAbc" />