使えんでもない。
私の使い方は、こんな感じ。
- log4netを参照してログ出力するDLLをC#で開発してCOM登録
- ↑を参照してExcel VBAから呼び出す
で、VBAから実行してlog4netを使う場合、log4netの設定をファイル形式にしない方が良いということです。
ファイル形式にしない方が良い理由
めちゃくちゃ単純。
設定ファイルの読み込み設定をAssemblyInfo.csに記載すると思いますが、この時に指定するパスが、Excel本体(例:C:\Program Files\Microsoft Office\Office16)からの相対パスになるからです。
個人で使うなら構わないけど、Excel本体のインストール先なんてバージョンによって変わりますし、現実的じゃない。
設定はコード内に記述しよう
COM登録するDLL側
私の場合、実行している端末のどっかにshareフォルダを作って共有していることを前提に、Error.logファイルを出力する作りにしています。
/// <summary>
/// log4net関連クラス
/// </summary>
internal class Log4netController
{
// Logger
public static ILog Logger { get { return LogManager.GetLogger("Log"); } }
// 初期化
public static void Initilize()
{
string path = @"\\" + Environment.MachineName + @"\share";
if (Directory.Exists(path))
{
FileAppender newAppender = new FileAppender()
{
Name = "DebugLogDailyAppender",
File = path + @"\Error.log",
AppendToFile = true,
Encoding = Encoding.UTF8,
Layout = new PatternLayout("%date [%-5level] %file(%line)%n %class.%method%n %message%n")
};
newAppender.ActivateOptions();
Logger logger = (Logger)Logger.Logger;
logger.AddAppender(newAppender);
logger.Hierarchy.Configured = true;
}
}
}
使うときはこんな感じ。
Log4netController.Logger.Error("エラー内容");
あとは、インストーラーをこしらえて、log4net.dllと作成したDLLを配布して、COM登録をします。
VBAからはCOM登録したDLLを参照設定からチェックして、好きに呼び出せばよろし。
他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。