如何在Asp.net core 2.0中使用log4net

k11*_*1k2 45 c# asp.net log4net log4net-configuration asp.net-core-2.0

log4net在我的asp.net core 2.0应用程序中配置,如本文中提到的LINK

Program.cs中

public static void Main(string[] args)
{
    var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
    XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));

    BuildWebHost(args).Run();
}
Run Code Online (Sandbox Code Playgroud)

HomeController的

public class HomeController : Controller
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController));

    public IActionResult Error()
    {
        log.Info("Hello logging world!");
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
}
Run Code Online (Sandbox Code Playgroud)

log4net.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFile" />
    </root>
    <appender name="RollingFile" type="log4net.Appender.FileAppender">
      <file value="?C:\Temp\app.log" /> 
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

倒霉!我没有看到生成的任何文件C:\Temp\app.log目录.那会是什么错误?如何配置log4netasp.net core 2.0?

Jan*_*sky 58

请注意,已有用于ASP.NET Core日志记录界面的log4net适配器.

你唯一需要做的就是把它ILoggerFactory传给你的Startup班级,然后打电话

loggerFactory.AddLog4Net();
Run Code Online (Sandbox Code Playgroud)

并有一个配置到位.所以你不必写任何锅炉电镀代码.

https://github.com/huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore

  • 好的,但是您如何使用此记录器?我没有在提供的链接中找到有关用法的示例。例子? (2认同)
  • @Przemek。一旦完成此操作,然后在需要的地方注入`ILogger`或`ILogger &lt;T&gt;`,所有调用将被转发到log4net实现。https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1 (2认同)

Irf*_*raf 34

我成功地使用以下代码记录文件

public static void Main(string[] args)
{
    XmlDocument log4netConfig = new XmlDocument();
    log4netConfig.Load(File.OpenRead("log4net.config"));
    var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(),
               typeof(log4net.Repository.Hierarchy.Hierarchy));
    log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);

    BuildWebHost(args).Run();
}
Run Code Online (Sandbox Code Playgroud)

网站root中的log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="C:\Temp\" />
    <datePattern value="yyyy-MM-dd.'txt'"/>
    <staticLogFileName value="false"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level App  %newline %message %newline %newline"/>
    </layout>
  </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

  • 仍然无法正常工作(指的是ASP.NET Core 2.1框架)。日志文件未创建。读取了log4.net.config,但似乎未创建附加程序(日志的Appenders空列表)。XmlConfigurator被调用。log4net.config与原始文章完全相同。有任何想法吗? (5认同)

Jon*_*nny 7

您需要安装Microsoft.Extensions.Logging.Log4Net.AspNetCore NuGet 包并将 log4net.config 文件添加到您的应用程序。那么这应该工作:

public class Program
{
    private readonly ILogger<Program> logger;

    public Program()
    {
        var services = new ServiceCollection()
            .AddLogging(logBuilder => logBuilder.SetMinimumLevel(LogLevel.Debug))
            .BuildServiceProvider();


        logger = services.GetService<ILoggerFactory>()
            .AddLog4Net()
            .CreateLogger<Program>();
    }

    static void Main(string[] args)
    {
        Program program = new Program();

        program.Run();

        Console.WriteLine("\n\nPress any key to continue...");
        Console.ReadKey();
    }

    private void Run()
    {
        logger.LogInformation("Logging is working");
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 7

还在寻找解决方案吗?我从这个链接中得到了我的帮助。

我要做的就是在“程序类”的“ public static void Main”方法的顶部添加这两行代码。

 var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
 XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));
Run Code Online (Sandbox Code Playgroud)

是的,您必须添加:

  1. 使用NuGet的Microsoft.Extensions.Logging.Log4Net.AspNetCore。
  2. 一个名为log4net.config的文本文件,并将文件的属性(“复制到输出目录”)更改为“如果较新则复制”或“始终复制”。

您还可以配置asp.net核心应用程序,以使在输出控制台中记录的所有内容都记录在您选择的附加程序中。您也可以从github下载此示例代码,并查看我如何配置它。