提问人:Marianne Seggerman 提问时间:7/25/2023 最后编辑:jpsMarianne Seggerman 更新时间:11/7/2023 访问量:66
在用 .Net Core 6.0 编写的 REST API 中实现 log4net
Implementing log4net in REST API written in .Net Core 6.0
问:
我需要向 REST API 添加日志记录。它是用 .NET Core 编写的,将在 .Net Core 6.0 上运行。我创建了一个log4net.config文件,如下所示
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="C:\CMApps\Log\CMS.Folder.API.MyApp.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="50000KB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<logger name="MyApp" additivity="false">
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</logger>
</log4net>
</configuration>
谷歌搜索说添加构建器
var builder = WebApplication.builder
在程序.cs中 - 但是我的应用程序不知道Web应用程序 所以我在 Program.cs 中使用了以下内容
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
// added this
.ConfigureLogging(builder =>
{
builder.AddLog4Net("log4net.config");
});
我的控制器有这个
namespace SecureVault.Controllers
{
[ApiController]
[Route("API/[controller]/{id?}")]
public class MyAppController : ControllerBase
{
// private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger("MyApp");
[HttpGet]
public string Get(int id)
{
log.Info("remove before Production");
return id.ToString();
}
当我查看日志对象时 - 没有 Appenders 我需要做些什么才能让它工作
答:
0赞
Marianne Seggerman
7/26/2023
#1
log4net 应该只是元素
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="C:\CMApps\Log\CMS.BaseTech.API.SecureVault.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="50000KB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
</log4net>
控制器中的这一行
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger("MyApp");
应该改为
private readonly ILogger<MyAppController> _logger;
public MyAppController(ILogger<MyAppController> logger)
{
_logger = logger;
_logger.LogInformation("remove before production - Info");
_logger.LogDebug("remove before production - Debug");
_logger.LogWarning("remove before production - Warning");
_logger.LogError("remove before production - Error");
}
评论