log4netに指示したすべてをログに記録するのに問題があります。log.Info()
どこに電話をかけたかに本当に依存しているようです。適切な場所に配置すれば機能しますが、そうでない場合もあります。
ここに私の設定ファイルがあります:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<appSettings>
<add key="log4net.Internal.Debug" value="true" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="rollingFileAppender" />
</root>
<appender name="rollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\binoptics\VICLogs\VICLog.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="50" />
<maximumFileSize value="50MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message - %exception - %newline" />
</layout>
</appender>
</log4net>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="ClientRoleProvider">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
</providers>
</roleManager>
</system.web>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
log.Info() メソッドを呼び出すクライアント クラスは次のとおりです。
使用中:
using System.Reflection;
using log4net;
私のフィールド宣言では:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
呼び出し方法 (これは完全に機能します):
MessageBox.Show(
"Hello " + LoginManager.CurrentUserData[1].ToString() + "!\n\n" +
"Welcome to the BinOptics Visual Inspection Console.",
"Login Successful!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
WaferTrackerWindow wtw = new WaferTrackerWindow();
wtw.Show();
log.Info(
LoginManager.CurrentUserData[1].ToString() +
" has successfully logged in. ");
return "Exit";
私が以前に持っていた方法(これは機能しません):
log.Info(
LoginManager.CurrentUserData[1].ToString() +
" has successfully logged in. ");
MessageBox.Show(
"Hello " + LoginManager.CurrentUserData[1].ToString() + "!\n\n" +
"Welcome to the BinOptics Visual Inspection Console.",
"Login Successful!", MessageBoxButton.OK, MessageBoxImage.Exclamation);
WaferTrackerWindow wtw = new WaferTrackerWindow();
wtw.Show();
return "Exit";
この 2 番目の例では、例外はまったくスローされませんが、log.Info() 呼び出しは機能しません。log.Info() 行にブレークポイントを配置しました。その呼び出しですぐに壊れ、すべてが正常に実行されますが、ログファイルを確認すると、その行は書き込まれませんでした。
この特定の例では、 log.Info() 呼び出しを柔軟に配置できるので幸運です。この同じプロジェクトの他のクラスでは、そのような柔軟性はなく、呼び出しは特定の 1 つの場所にしかできません。
ここで何が起こっているのですか?とにかくこれを修正できますか?書き込みごとにファイルをフラッシュする必要がありますか? どんな助けでも大歓迎です!!
よろしく、
カイル