2016-11-22 3 views
1

log4net securitycontextをプログラムでglobal.asaxに設定しようとしていますが、動作しません。私はこのキーをweb.configに入れればうまくいくが、私はそれらの値をデータベースから取り出したい。作品log4netのsecurityContextをプログラムで設定するにはどうすればよいですか?

私のweb.configファイル:ない作品

<log4net> 
<appender name="FileAppenderGeneral" type="log4net.Appender.RollingFileAppender"> 
    <param name="File" value="Logs\app.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="'.'dd" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d %-5p - %m%n" /> 
    </layout> 
    <<securityContext type="log4net.Util.WindowsSecurityContext"> 
    <domainName value="hostname"/> 
    <userName value="username" /> 
    <password value="password" /> 
    </securityContext> 
    <encoding value="utf-8" /> 
</appender> 

私のGlobal.asax:私はGlobal.asaxの中で悪いやって何

log4net.Config.XmlConfigurator.Configure(); 
     ILog[] loggers = LogManager.GetCurrentLoggers(); 
     foreach (ILog logger in loggers) 
     { 
      foreach (IAppender appender in logger.Logger.Repository.GetAppenders()) 
      { 
       if (appender.GetType() == typeof(RollingFileAppender)) 
       { 
        log4net.Appender.RollingFileAppender fileAppender = (RollingFileAppender)appender; 
        WindowsSecurityContext securityContext = new log4net.Util.WindowsSecurityContext(); 
        securityContext.DomainName = "hostname"; 
        securityContext.UserName = "username"; 
        securityContext.Password = "password"; 
        securityContext.ActivateOptions(); 
        fileAppender.SecurityContext = securityContext; 
       } 
      } 
     } 

任意のアイデア?

答えて

1

私はあなた自身のアペンダーを作成する必要があると言います。

log4net構成ファイルは、アプリケーションで使用される各ロガーの設定にすぎません。つまり、すべてのロガーのセキュリティコンテキストを「プログラム的に」変更する必要があります。しかしここに問題があります。あなたはあなたのアプリケーションの開始時にすべてのロガーを持っているわけではありません。

したがって、独自のアペンダーを作成し、必要なアペンダーから継承する必要があります。それがlog4netの振る舞いに独自のロジックを組み込む唯一の方法です。

+0

Finnallyあなたは私のアペンダーをweb.configではなくC#で作成すると言っています。 Thnakあなた! – Mikelon85

+0

お手伝いしました! – MaKCbIMKo

関連する問題