Excel-DNAで、log4netの設定を別ファイルにせず(うまくできなかった)、C#のコードで設定する方法を採用した。
public static class SomeClass
{
static SomeClass()
{
Logger.Setup();
}
public static void SomeMethod()
{
WriteLog.Write("log");
}
}
Logger.Setup()
は、アプリ全体で、1度だけ実行すれば良いはず。
/// <summary>
/// ログを記録
/// </summary>
/// <see href="https://qiita.com/n-noguchi/items/5181fc9dc7929ddb7d13"/>
public static class WriteLog
{
static ILog logger = LogManager.GetLogger(typeof(WriteLog));
public static void Write(string log)
{
logger.Info(log);
}
}
設定例
public class Logger
{
public static void Setup()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date [%thread] [%-5level] %logger - %message%n";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.DatePattern = "yyyyMMdd'.log'";
roller.File = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"HOGE\HOGE XL Add-In\Logs\Trace_");
roller.Layout = patternLayout;
roller.MaxSizeRollBackups = -1;
roller.MaximumFileSize = "10MB";
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
roller.StaticLogFileName = false;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
}
}
roller.File
の指定で、${APPDATA}
は機能しなかった。
参照
- Using Log4Net in an Excel-DNA add-in
- .NET Core 3.1でLog4netを使う
- https://stackoverflow.com/a/19538654/
- https://stackoverflow.com/a/45232665/
環境
- .NET6
- ExcelDna 1.7
- log4net 2.0.17
Note
ExcelDNAで作成したアドインでログを記録するのは、ガンジス XL アドイン:インボイス用関数で必要になったため。