2017-06-05 17 views
0

Im AdoNetAppenderを使ってログをデータベースに書き出します。
ロガーがデータベースに接続されているので接続が良好です。
また、接続でデータベース名を変更すると、log4netトレースでエラーが表示されるため、接続は良好ですがデータベーステーブルは空です。Log4netは `AdoNetAppender`を使ってデータベースに書き込みません

は、ここで設定ファイルされる:

<log4net> 
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="100" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="data source=(localdb)\MSSQLLocalDB;initial catalog=LogsAffiliatePortal;integrated security=true;persist security info=True;" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
    <parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
    <parameterName value="@thread" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%thread" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@log_level" /> 
    <dbType value="String" /> 
    <size value="50" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@logger" /> 
    <dbType value="String" /> 
    <size value="255" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@exception" /> 
    <dbType value="String" /> 
    <size value="2000" /> 
    <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
</appender> 

    <root> 
    <level value="ALL" /> 
    <appender-ref ref="AdoNetAppender" /> 
    </root> 
    </log4net> 

ここでは、イムは、ログを使用する方法である:

public class Global : HttpApplication 
{ 
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

    void Application_Start(object sender, EventArgs e) 
    { 

     var configFile = ConfigurationManager.AppSettings.Get("MyLog4NetConfigFile"); 
     if (!string.IsNullOrEmpty(configFile)) 
      { 

      var f = HostingEnvironment.ApplicationPhysicalPath +Environment.ExpandEnvironmentVariables(configFile); 
        XmlConfigurator.Configure(new FileInfo(f)); 
     } 

       log.Debug("yes"); 
       log.Error("test"); 
    } 
} 
+0

バッファサイズが '100'に設定されているため、ログイベントが多数ある場合にのみデータベースに書き込まれます。テストのために '1'に設定してください。 – stuartd

+0

@stuartd - 報酬を得たい場合は、回答として投稿してください。 – SexyMF

+0

ただお手伝いします.. – stuartd

答えて

0

一般的な問題は、ログメッセージを期待していることですが、log4netのは、バッファリングです。バッファサイズを1に変更する:

<bufferSize value="1" /> 

すべてのメッセージは直接記録されます。

関連する問題