プログラム 技術

log4netでログが出力されない

以前、紹介したlog4netでログを出力する方法でバッチを作成し、タスクスケジューラ(最上位権限での実行)経由で実行したのですがログが出力されずに困ったのでその時のメモです

以前の記事
C#でログファイルを実装する - ナストンのまとめ
C#でログファイルを実装する - ナストンのまとめ

今回はログファイルについてです。NLogを使おうと思っていたいのですが、いつの間にか非推奨(2024年11月現在)となっ ...

続きを読む

状況の切り分け

なぜログファイルが書き出されないのかを特定するためにとりあえずバッチファイルを直接実行してみました
そうしたら問題なくログファイルが出力されました。ではなぜタスクスケジューラ経由だとログファイルが出力されないのか
そこで以下のコードが問題ではないかと仮説を立てました

// 設定ファイルを読み込む
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));

上記コードはExeファイルと同じ階層にあるconfigファイルを読み込むようになっています
しかし、タスクスケジューラの最上位権限で実行した場合は以下のように実行されるためconfigファイルが読み込めない

# バッチを直接実行した場合のパス
# この場合はnet8.0配下にlog4net.configがあるため正常にログが書き出される
C:\work\csharpProject\bin\Debug\net8.0>~.exe

# タスクスケジューラ(最上位権限)で実行した場合のパス
# この場合はC:\Windows\System32配下のlog4net.configを読み込もうとするが存在しないので読み込めない
# そのためログファイルが書き出されない
C:\Windows\System32>C:\work\csharpProject\bin\Debug\net8.0>~.exe

結局どうしたのか

Exeファイル実行時にExeがあるフォルダまで移動するようにしました。実行パスまでは以前記事にも記載したことのあるやり方で取得しています

Environment.CurrentDirectory = Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
以前の記事
.Netで実行パスを取得する - ナストンのまとめ
.Netで実行パスを取得する - ナストンのまとめ

.Net 8で実行パスを取得しようとしたところ.NetFrameworkとは若干違いがあったのでメモしておきます Sys ...

続きを読む

これでタスクスケジューラ(最上位権限)で実行しても問題なくログファイルが作成されるようになりました

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

お問い合わせ
お問い合わせ  | アドバンスド・ソリューション株式会社
お問い合わせ | アドバンスド・ソリューション株式会社

お問い合わせはこちら

-プログラム, 技術
-