如何在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
扩展创建的,所以它让我很烦恼。 如果我通过上面的模式创建了配置文件,那么代码就可以完美运行。