- PR -

log4netのログ出力が止まってしまう

1
投稿者投稿内容
新人
会議室デビュー日: 2007/05/07
投稿数: 3
投稿日時: 2007-05-07 11:01
log4netでファイルにログ出力しています。
しかし順調にログ出力できていたものが、
それ以降ログ出力されない現象が2回発生しました。
2週間ほど動作させて2回しか発生していないので、発生条件などは分かっていません。
ログ出力できていた時点から、ログ出力されなくなった時点までの間に
マシンの電源 OFF→ON等を行ったかどうかは、覚えていません。

解決方法、考えられる原因等ご教授頂きたく質問致しました。
宜しくお願い致します。
↓インデントの設定方法が分からず、ちょっと読みにくいです。
すいません・・・

■動作環境
- Windows 2000 (SP4適用済み) + IIS 5.0 (Windows 2000 に付属しているIISです)
- .NET Framework 2.0.50727 (ASP.NET 2.0.50727)
- log4netでログ出力しているのは、上記環境で動作するWebサービスプログラムです
- 開発は Visual Studio 2005 (SP1適用済み) の VB.NET

■web.configファイル内の <log4net>
以下の通りに記述しています。(主な項目のみ)
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="何とか\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\WebService.log" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="size" />
<param name="CountDirection" value="0" />
<param name="MaxSizeRollBackups" value="5" />
<param name="MaximumFileSize" value="5KB" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>

■その他情報
- それ以降ログ出力されなくなった現象発生後、
[管理ツール] > [インターネットサービスマネージャ]で、
[既定のWebサイト]右クリック 停止→開始 しても復旧せず。
- Windowsサービス[World Wide Web Publishing Service] 停止→開始 で復旧
しました。

■自分なりの推測
log4netによるログ出力は、以下の方法で行っています。

Private Shared logger As log4net.ILog = Nothing

If logger Is Nothing Then
XmlConfigurator.Configure()
logger=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType)
End If
logger.Info("AAAAA")

上記において logger が Nothingかどうかを判定する箇所は、
排他制御を掛けていないので、
ほぼ同時に複数のWebクライアントから要求があり、
その為、logger の値がおかしくなったのではないか?
と推測しています。
排他制御を掛ける処理を追加してみれば良いのですが、
今まで2回しか発生しておらず(なかなか発生しない)、
処理を追加しても動作する事は確認できても、
それで現象が発生しなくなるかどうかの検証ができないと考えています。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-05-07 11:42
少なくとも、排他制御はなくても大丈夫でしょう。
新人
会議室デビュー日: 2007/05/07
投稿数: 3
投稿日時: 2007-05-07 19:51
まだ解決できていませんが、とりあえず、ありがとうございました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-05-07 22:42
引用:

なちゃさんの書き込み (2007-05-07 11:42) より:
少なくとも、排他制御はなくても大丈夫でしょう。


すみません、こう書いたんですが、
XmlConfigurator.Configure()
の方はひょっとすると問題あるのかもしれません(し、実質ないのかもしれません)。

logger=LogManager.GetLogger(MethodBase.GetCurrentMethod
こっちは実質問題ないはずですが。

で、まあ気になるなら静的コンストラクタで初期化したほうが無難だと思います。
ただし、今回の現象とはなんとなく無関係なんじゃないかとも思います。

ファイルのローテーションで何かが失敗してないかとか、
あとイベントログに何か出てないかとか、
log4netの内部ログ?みたいなのに何か出てないかとか
調べた方がいいかもしれません。

私は使ったことないのでこれ以上は分かりませんが…
新人
会議室デビュー日: 2007/05/07
投稿数: 3
投稿日時: 2007-05-08 19:18
補足、ありがとうございました。
以降発生しないので、理論上だけで考えてみました。
ワーカープロセス内で異常が発生し、穏やかなプロセスリサイクリングが発生したのではないかと・・・
そうすると新しいプロセスが生成され、古いプロセスが占有している同一ファイルにLOG出力しようとする為、
以降、LOGが出力されなくなってしまったのではないかな?
1

スキルアップ/キャリアアップ(JOB@IT)