gpt4 book ai didi

c# - 对于使用 HttpClient 的 API 调用,无法使用 NLog 抑制 Microsoft 日志

转载 作者:行者123 更新时间:2023-12-04 01:08:48 24 4
gpt4 key购买 nike

我已经为 .NET Core 3.1 MVC web 应用程序和 API 项目实现了 NLog。 nlog.config两者的文件几乎相同。我已经仔细检查过这个,唯一的区别是他们登录的数据库表名和文件名。
我成功地从 API 项目中抑制了非必要的 Microsoft 日志,但对于 Web 应用程序只能部分执行此操作。具体来说,Microsoft 的 Trace 和 Info 日志处理使用 HttpClient 调用 API 的情况。出现在文件和数据库中:
photo of database table data showing microsoft logs that should not be there
可以看到只有一个日志是我实际写的日志,其余都是微软自动记录的。
我不确定在这里尝试什么,但我查看了内部日志并没有发现任何异常。
我想知道如何抑制额外的 Microsoft 日志以及我当前的配置有什么问题?
我已安装的 NuGet 包(两个应用程序相同):
Picture showing NuGet packages and their versions I have installed: NLog-4.7.6, NLog.Extensions.Logging-1.6.5, NLog.Schema-4.7.6, NLog.Web.AspNetCore-4.9.3
Web 应用程序项目的 nlog.config:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwConfigExceptions="true"
internalLogLevel="Info"
internalLogFile="c:\temp\internal-CNC_WebUI-nlog.txt">

<extensions>
<add assembly="Nlog.Extensions.Logging"/>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>

<targets>
<target xsi:type="File" name="CNC_WebUIFile" fileName="c:\temp\nlog-CNC_WebUIFile-${shortdate}.log"
layout="${aspnet-traceidentifier}|${configsetting:AppSettings.NlogConnection.AppName}|${event-properties:ObjectID}|${date}|${uppercase:${level}}|${message} ${exception:format=tostring}|${logger}|${callsite:filename=false}|${exception:toString}" />

<target name="databaseLogger" xsi:type="Database"
dbProvider="sqlserver"
dbHost="${configsetting:AppSettings.NlogConnection.DbHost}"
dbDatabase="${configsetting:AppSettings.NlogConnection.Database}"
dbUserName="${configsetting:AppSettings.NlogConnection.User}"
dbPassword="${configsetting:AppSettings.NlogConnection.Password}" >

<commandText>
INSERT INTO dbo.CNC_WebUILogs (
CorrelationId, Application, ObjectID, Logged, Level, Message,
Logger, CallSite, Exception
) VALUES (
@CorrelationId, @Application, @ObjectID, @Logged, @Level, @Message,
@Logger, @Callsite, @Exception
);
</commandText>
<parameter name="@correlationId" layout="${aspnet-traceidentifier}" />
<parameter name="@application" layout="${configsetting:AppSettings.NlogConnection.AppName}" />
<parameter name="@ObjectID" layout="${event-properties:ObjectID}" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@callSite" layout="${callsite:filename=false}" />
<parameter name="@exception" layout="${exception:toString}" />
</target>
</targets>

<rules>
<logger name="Microsoft.*" levels="Warn,Error,Fatal" writeTo="databaseLogger,CNC_WebUIFile"></logger>
<logger name="Microsoft.*" minlevel="Trace" final="true" />

<logger name="*" minlevel="Trace" writeTo="CNC_WebUIFile" />
<logger name="*" minlevel="${configsetting:AppSettings.NlogConnection.LogLevel}" writeTo="databaseLogger" />
</rules>
</nlog>
我的一个存储库的 API 调用事件由 Microsoft 记录:
public class MfgrRepo : IMfgrRepo
{
private readonly IHttpClientFactory _clientFactory;

public MfgrRepo(IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}

public async Task<List<MfgrDto>> Get()
{
HttpClient client = _clientFactory.CreateClient(HttpClientConfigNames.CNC);

List<MfgrDto> models = new List<MfgrDto>();
try
{
HttpResponseMessage response = await client.GetAsync("api/Mfgrs");
models.AddRange(await response.Content.ReadFromJsonAsync<List<MfgrDto>>());
}
catch (Exception ex)
{
throw ex;
}

return models;
}
}

最佳答案

您可以 configure the log levels M.E.Logging 系统通过 appsettings.json 使用文件。这也允许您配置每个命名空间的类型,因此您可以创建 System.Net.Http以这种方式静默的命名空间:

{
"Logging": {
"LogLevel": {
"System.Net.Http": "Warning"
}
}
}

关于c# - 对于使用 HttpClient 的 API 调用,无法使用 NLog 抑制 Microsoft 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65479689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com