gpt4 book ai didi

logging - 从静态类记录 ASP.NET Core Web API

转载 作者:行者123 更新时间:2023-12-01 23:43:41 26 4
gpt4 key购买 nike

我在 Controller 上使用依赖注入(inject)很好地记录,现在我需要静态类记录一些内容。

如何静态类记录?

我无法使用依赖项注入(inject),因为它是静态的,而且我不能将现有的记录器对象传递给静态类,因为它会在日志文件中包含错误的类名称。

换句话说,我如何从静态类中的 loggerfactory 获取记录器?

我遇到了一个类似的问题,他们指出了一篇关于静态类中的 loggerfactory 的文章,但这实际上不起作用,因为我无法从中获取新的记录器,因为它不会接受静态类参数:

“静态类型不能用作类型参数”

最佳答案

解决方案是在启动时初始化的实用程序静态类中静态引用 LoggerFactory:

/// <summary>
/// Shared logger
/// </summary>
internal static class ApplicationLogging
{
internal static ILoggerFactory LoggerFactory { get; set; }// = new LoggerFactory();
internal static ILogger CreateLogger<T>() => LoggerFactory.CreateLogger<T>();
internal static ILogger CreateLogger(string categoryName) => LoggerFactory.CreateLogger(categoryName);
}

在 Startup.cs 上初始化:

public Startup(ILogger<Startup> logger, ILoggerFactory logFactory, IHostingEnvironment hostingEnvironment)
{
_log = logger;
_hostingEnvironment = hostingEnvironment;
Util.ApplicationLogging.LoggerFactory = logFactory;//<===HERE
}

然后您可以构建一个记录器以从静态类中使用,如下所示:

internal static class CoreJobSweeper
{
private static ILogger log = Util.ApplicationLogging.CreateLogger("CoreJobSweeper");
}

关于logging - 从静态类记录 ASP.NET Core Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48676152/

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