1

ロギングにはLog4Netを使用しています。アプリケーションが起動したら、電話します

log4net.Config.XmlConfigurator.Configure();

ただし、この行は15秒で終了します。私は何か間違ったことをしていますか?それとも正常ですか?

Unityを使用して依存性注入を行うASP.NETMVCを使用して開発しています。

アプリケーションの起動時に、BootstrapperInitialise関数を呼び出します

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

Bootstrapper Initialize関数で、タイプILogを登録します。

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

GetLogger関数の開始時に、configure関数を呼び出します

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

編集
------------------------------------------------- --------------------------------

<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>
4

2 に答える 2

3

15秒は(接続)タイムアウトのように聞こえますが、デフォルトのタイムアウトは15秒だと思います。

私はかつて同様の問題を抱えていましたが、CLRはロード時にauthenticode署名を検証して、アセンブリの発行者の証拠を作成しようとしたことが判明しました。詳細はわかりませんが、アセンブリセクションに「generatePublisherEvidence」という名前の構成要素があり、オフにすることができます。ただし、これを実行するかどうかを確認する必要があります。そして、これに対する影響は何ですか。.Net 4(またはそれ以降)を使用している場合、これはロード時間に影響を与えないはずです。

Webアプリケーションの場合、この設定をアプリケーションweb.configで設定することはできません。.NetFrameworkディレクトリのaspnet.configで設定する必要があります。

于 2012-04-27T12:16:18.033 に答える
0

次のステートメントを呼び出そうとすると

log4net.Config.XmlConfigurator.Configure(); 

システムは、指定されたデータベース接続文字列の検証を試みます。ここでの問題は、指定された接続文字列が接続されていない可能性があり、タイムアウトが発生するまで接続しようとしていることです。

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

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

于 2017-08-08T09:59:15.983 に答える