1

私のアプリケーションでは、Common.Loggingロギング機能を抽象化するためにライブラリを使用しています。スタートアップ アセンブリでは、ライブラリapp.configに対して機能するように (ファイル内で)構成されていました。Log4Netいくつかのアペンダが確立されています: ConsoleAppenderRollingFileAppenderTraceAppender。すべてが単一で正常に機能しAppDomainます。ただし、新しく作成された .log ではロギングが機能しないことがわかりましたAppDomain。すなわち:

Logger.Info( "Logging works here" ); // Logging works here

var appDomain = AppDomain.CreateDomain(
                              "AppDomain." + componentHost.FullName,
                               AppDomain.CurrentDomain.Evidence,
                               AppDomain.CurrentDomain.SetupInformation );

var proxy = (IComponentHost) appDomain.CreateInstanceAndUnwrap(
                               componentHost.Assembly.FullName,
                               componentHost.FullName,
                               false,
                               BindingFlags.Default,
                               null,
                               new object[] { },
                               null,
                               null );

proxy.Init(); // Logging does not work in Init() method stack

app.config構成とCommon.LoggingAPI (つまりメソッド)の両方を使用して解決策を見つけようとしていますLogManager.Reset()が、問題は解決しません。

Common.Logging / Log4Net新しく作成された で適切に動作させるにはどうすればよいAppDomainですか? 助けてください。

4

2 に答える 2

1

表示されているコードから、アプリ ドメインの構成ファイルを提供していないようです。これを行ってから数年が経ちましたが、私の記憶が正しければ、新しいアプリ ドメインの構成ファイルは既定では空です。

AppDomainSetup クラスの使用方法の例を次に示します。

AppDomainSetup ads = new AppDomainSetup();

ads.SetConfigurationBytes( Encoding.UTF8.GetBytes(
@"<configuration>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5"></remove>
  </DbProviderFactories>
</configuration>" ) ); 

(コード サンプルは Tom Overton の功績によるものです。)

この問題に関する彼の説明については、http://social.msdn.microsoft.com/Forums/vstudio/en-US/a23ff0ad-8a4c-4aaf-8281-dcc7e840f8a5/assigning-appconfig-to-appdomain?forum=clrを参照してください。

于 2014-07-24T17:25:34.637 に答える
1

log4netにも同様の問題があります。Assembly.GetCallingAssembly() を使用して構成ファイルを取得するパラメータなしで XmlConfigurator.Configure() を使用しました。私はそれを次のように置き換えました:

var configFile = new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
if (!configFile.Exists)
    throw new Exception($"Failed to find configuration file '{configFile.FullName}'");
XmlConfigurator.Configure(configFile);
于 2016-11-11T08:49:37.423 に答える