user3865946
user3865946

Reputation: 53

Log4Net not logging information in .NET 8

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

Answers (1)

Zhi Lv
Zhi Lv

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):

  1. 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>
    
  2. 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>
    
  3. 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)));
         }
     }
    
  4. In the Program.cs file, register the Log4Net service use the following code:

     builder.Logging.AddLog4Net("log4net.config");
    
  5. 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.

result1

Upvotes: 0

Related Questions