【问题标题】:How can I set securityContext for log4net programmatically?如何以编程方式为 log4net 设置 securityContext?
【发布时间】:2016-11-22 14:13:37
【问题描述】:

我正在尝试在 global.asax 中以编程方式设置 log4net securitycontext,但它不起作用。如果我把这个键放在 web.config 中效果很好,但我想从数据库中获取这些值。

我的 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 不起作用:

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

知道我在 global.asax 中做错了什么吗?

【问题讨论】:

    标签: c# .net asp.net-mvc log4net


    【解决方案1】:

    我会说您需要创建自己的附加程序。

    log4net 配置文件只是对将在您的应用程序中使用的每个记录器的配置。这意味着您需要“以编程方式”更改所有记录器的安全上下文。但这里有一个问题。您的应用程序开始时没有所有记录器。

    因此,您需要创建自己的 appender,并从您需要的 appender 中继承它。这是在 log4net 行为中注入您自己的逻辑的唯一方法。

    【讨论】:

    • 最后我照你说的做,在 C# 中而不是在 web.config 中创建我的 appender。谢谢你!!
    • 很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2019-10-09
    相关资源
    最近更新 更多