VBAからlog4netを使えるか

使えんでもない。
私の使い方は、こんな感じ。
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関連要素をまとめていますので、よければ一覧記事もご覧ください。

返信を残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)