Reputation: 53
I'm trying to use Log4Net in my .NET 8 application
This is my log4net config:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingXMLFile" />
</root>
<appender name="RollingXMLFile" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="C:\\AppPath\\Log.txt" />
<appendToFile value="true" />
<maximumFileSize value="5000KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
</log4net>
When I try to run the application, I only see entries for ERROR
and CRITICAL
levels. Every other level is ignored.
Log4Net worked fine for my .NET 4.8 application. Is there any setting/configuration I am missing for .NET 8?
Upvotes: 0
Views: 70
Reputation: 21636
code image Please let me know if this works
Based on your code, you can refer to the following sample (it works well on my side):
Create a Net 8 MVC application and install the following package via NuGet:
<ItemGroup>
<PackageReference Include="log4net" Version="3.0.4" />
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="8.0.0" />
</ItemGroup>
Create a log4net.config
config file in the application’s root folder
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingXMLFile" />
</root>
<appender name="RollingXMLFile" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file value="app.txt" />
<appendToFile value="true" />
<maximumFileSize value="5000KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
</log4net>
Create a Services folder, and add a Log4netExtensions.cs
class in the Service folder:
public static class Log4netExtensions
{
public static void AddLog4net(this IServiceCollection services, string log4netconfig)
{
XmlConfigurator.Configure(new FileInfo(log4netconfig));
services.AddSingleton(LogManager.GetLogger(typeof(Program)));
}
}
In the Program.cs file, register the Log4Net service use the following code:
builder.Logging.AddLog4Net("log4net.config");
In the controller, inject the logger and add logs:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("This is a default informational log.");
_logger.LogDebug("This is a default LogDebug log.");
_logger.LogWarning("This is a default LogWarning log.");
_logger.LogError("This is a default LogError log.");
_logger.LogCritical("This is a default LogCritical log.");
return View();
}
The result as below: in the application folder, find the app.txt file from bin\debug\net8.0 folder.
Upvotes: 0