1

私はログにLog4Netを使用しています。アプリケーションが起動すると、私はlog4net.Config.XmlConfigurator.Configure()が長すぎます

log4net.Config.XmlConfigurator.Configure()を呼び出します。

しかし、この行には15秒かかります。私は何か間違っているのですか?それとも普通ですか?

私はASP.NET MVCで開発しています。依存性注入のためにUnityを使用しています。

アプリケーションの開始時に、私はブートストラップ初期化機能では

protected void Application_Start() 
{ 
    IUnityContainer container = Bootstrapper.Initialise(); 
    ... 
    ... 
} 

ブートストラップ初期化関数を呼び出し、私はタイプのILogを登録します。私は--------------------- EDIT

public static ILog GetLogger(Assembly assembly, string connectionString) { log4net.Config.XmlConfigurator.Configure(); //<----- it takes 15 seconds to finish ... ... } 

のconfigure関数を呼び出すのgetLogger機能の開始時に

private static IUnityContainer BuildUnityContainer() 
{ 
    var container = new UnityContainer(); 
    ... 
    ... 
    container.RegisterType<ILog>("", new ContainerControlledLifetimeManager(), 
     new InjectionFactory(factory => 
     LogManager.GetLogger(typeof(HomeController).Assembly, connectionString))); 
    ... 
    ... 
} 

-------------------------------------------------- ----------

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="0" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[UserId],[Operation],[EntityType],[EntityId],[IP],[Host],[SessionId],[LogGroup]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @UserId, @Operation, @EntityType, @EntityId, @IP, @Host, @SessionId, @LogGroup)" /> 
    <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> 
    <parameter> 
     <parameterName value="@UserId"/> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="UserId" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@IP"/> 
     <dbType value="String" /> 
     <size value="25" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="IP" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@Host"/> 
     <dbType value="String" /> 
     <size value="50" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="Host" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@LogGroup"/> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="LogGroup" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@Operation"/> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="Operation" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@EntityType"/> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="EntityType" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@EntityId"/> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="EntityId" /> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@SessionId"/> 
     <dbType value="String" /> 
     <size value="88" /> 
     <layout type="log4net.Layout.RawPropertyLayout"> 
     <key value="SessionId" /> 
     </layout> 
    </parameter> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="AdoNetAppender" /> 
    </root> 
</log4net> 
+0

やって – wal

+0

私はあなたのアドバイスを試みたが、それは助けにはならなかった。プロセスはそこで待機し、内部的なことをすると思います。 – adyusuf

+0

設定ファイルを表示できますか? –

答えて

2

15秒(接続)タイムアウトのように聞こえる、私は、デフォルトのタイムアウトは15であると信じて秒。

私は一度同様の問題がありました。CLRは、アセンブリ時のパブリッシャエビデンスを作成するために、ロード時にauthenticode署名を検証しようとしました。 詳細についてはわかりませんが、オフにできるアセンブリセクションに "generatePublisherEvidence"という名前の構成要素があります。あなたはこれを行うにしたい場合はチェックする必要があります。そして、これが意味することは何か。 .Net 4(またはそれ以上)を使用している場合、これは読み込み時間に影響しません。

この設定は、アプリケーションweb.configでは設定できません。 .Netフレームワークディレクトリのaspnet.configに設定する必要があります。

+0

正確には15秒ではなく、14,3何かを要します。私はタイムアウトではないと思う。あなたが推測したように、私は.Net 4を使用しますが、 "generatePublisherEvidence"設定を試みましたが、どちらも役に立たなかった。 – adyusuf

+0

これは、設定ファイルにデータベースアペンダーを設定した場合、log4netはそのアペンダーを使用していなくても接続しようとします。 –

0

あなたは、システムが指定されたデータベースの接続文字列を検証しようとする次の文

log4net.Config.XmlConfigurator.Configure(); 

を呼び出そう。ここで問題となるのは、接続文字列が接続されていない可能性があり、タイムアウトが発生するまで接続しようとしていることです。

指定された接続文字列が有効かどうかを確認してください。

http://techxposer.com/2017/08/08/log4net-config-xmlconfigurator-configure-taking-too-much-time/

それは(合計15の7秒と言う)を通して半分の方法であるときにアプリケーションを一時停止し、(メインスレッドが待機している場合、すべてのスレッドの)スタックトレースを見ては、上で待機しているかを確認するか、
関連する問題