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

我在我的asp.net core 2.0应用程序中配置log4net ,如本文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(); } 

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

log4net.config

                

不走运!,我没有看到在C C:\Temp\app.log目录中生成任何文件。 那会是什么错误? 如何为asp.net core 2.0配置log4net

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

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

网站root中的log4net.config

                     

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

您需要做的只是将ILoggerFactory传递给Startup类,然后调用

 loggerFactory.AddLog4Net(); 

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

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

根据Irfan的回答,我在OSX上使用.NET Core 2.1.300进行了以下XML配置,它正确地记录并附加到./log文件夹和控制台。 请注意, log4net.config必须存在于解决方案根目录中(而在我的情况下,我的应用程序根目录是一个子文件夹)。

                           

另一个注意事项,在app.config中设置XML的传统方法不起作用:

    
...

出于某种原因,通过log4netConfig["log4net"]访问XMLDocument时找不到log4net节点。

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

 public class Program { private readonly ILogger logger; public Program() { var services = new ServiceCollection() .AddLogging(logBuilder => logBuilder.SetMinimumLevel(LogLevel.Debug)) .BuildServiceProvider(); logger = services.GetService() .AddLog4Net() .CreateLogger(); } 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"); } } 

抱歉耽搁了!

在我的场景中,它是关于.config架构的。 上面的一个是用.config扩展创建的,所以它让我很烦恼。 如果我通过上面的模式创建了配置文件,那么代码就可以完美运行。