2016-11-22 2 views
1

Ich versuche Log4net SecurityContext programmgesteuert in der global.asax, aber es funktioniert nicht. Wenn ich diesen Schlüssel in die web.config einfüge, funktioniert es großartig, aber ich möchte diese Werte aus der Datenbank nehmen.Wie kann ich den securityContext für log4net programmgesteuert setzen?

Meine web.config, die funktioniert:

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

Mein global.asax, die nicht funktioniert:

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; 
       } 
      } 
     } 

Jede Idee, was bin ich schlecht in der global.asax tun?

Antwort

1

Ich würde sagen, dass Sie Ihren eigenen Appender erstellen müssen.

Die log4net-Konfigurationsdatei wird nur für jeden Logger konfiguriert, der in Ihren Anwendungen verwendet wird. Das bedeutet, dass Sie den Sicherheitskontext für alle Ihre Logger "programmatisch" ändern müssen. Aber hier ist ein Problem. Sie haben nicht alle Ihre Logger zu Beginn Ihrer Anwendung.

Daher müssen Sie Ihren eigenen Appender erstellen und erben von dem Appender, den Sie benötigen. Nur so können Sie Ihre eigene Logik in log4net-Verhalten einbringen.

+0

Finnally ich tun, was Sie sagen, erstellen Sie meine Appender in C# und nicht in web.config. Thnak du !! – Mikelon85

+0

War froh zu helfen! – MaKCbIMKo

Verwandte Themen