c# - Log4net appenders 总是空的

标签 c# asp.net-web-api owin log4net

我在我的 webapi 项目中使用 log4net(使用 autofac 和 owin)。我将其添加到我的 Controller 中

LogManager.GetLogger(typeof(NotificationController));

但是我看到没有加载appender。在我的配置中我有这个

 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
...    
<log4net>
        <root>
          <level value="ALL" />
          <appender-ref ref="aiAppender" />
          <appender-ref ref="TraceAppender" />
          <appender-ref ref="FileAppender" />
        </root>
        <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message%newline" />
          </layout>
        </appender>
        <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />              
          </layout>
        </appender>
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
          <file value="log\server.log" />
          <appendToFile value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
          </layout>
        </appender>
      </log4net>

我没有构建错误,如果我调用它,我的代码运行没有错误

logger.Fatal("Error");

但是我没有日志。

更新

将它添加到启动类但没有改变

public class Startup
{
    private static readonly ILog logger = LogManager.GetLogger(typeof(Startup));

    public void Configuration(IAppBuilder app)
    { 
        HttpConfiguration config = new HttpConfiguration();

        logger.Info("Start application");

最佳答案

必须明确告知 Log4Net 您希望它从 App.config 读取 XML 配置。

参见:log4net only works when XmlConfigurator.Configure() is called

在您的应用程序启动代码中调用静态方法 XmlConfigurator.Configure(),或者为解决方案中的所有项目将以下内容添加到 AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

您可能还会发现必须在启动后立即调用 LogManager.GetLogger() - 即使记录器实例未用于任何事情,这似乎也有所不同。

关于c# - Log4net appenders 总是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42496220/

相关文章:

ios - ACRCloud音乐识别SDK的不可读脱​​机DB文件

c# - 如何动态连接 C# 中的 T-SQL 表,来自 ListView 的 COLUMNS

c# - Web API 中基于 token 的身份验证,无需任何用户界面

java - C# Xamarin 中的 RegisterDataSetObserver

asp.net-web-api - 在ASP.NET Core Web API中实现HTTP缓存(ETag)

asp.net-mvc-5 - 使用外部提供程序时如何记住MVC5中的登录名

c# - 在 Owin 中间件中设置挑战

asp.net-web-api - 从数据存储实现动态 OAuthBearerServerOptions AccessTokenExpireTimeSpan 值

c# - 循环遍历 DataRow 中的每个元素

c# - 编译委托(delegate)表达式的性能