[英]Logging in .NET Core without DI?
看起来微软真的想用 .NET Core 把 DI 塞进你的喉咙,我不知道为什么,但坦率地说,我的控制台应用程序又小又简单,我只是不想构建一个完整的 DI 容器来做一些简单的日志记录。 如何在不使用 DI 的情况下登录 .NET Core? 我读过的所有内容都假设您将使用 .NET Core 的内置日志架构,这显然需要 DI,但必须有一种方法可以在没有 DI 的情况下使用 class 上的 static 变量吗?
如果您想自己动手,则需要在某处实例化LoggerFactory实例并配置所需的提供程序。 然后,您只需调用CreateLogger来创建实例或使用new Logger<T>(ILoggerFactory)
来创建记录器。
using Microsoft.Extensions.Logging;
static class MyLogger {
public static ILoggerFactory LoggerFactory {get;}
static MyLogger() {
LoggerFactory = new LoggerFactory();
LoggerFactory.AddConsole();
}
}
public MyClass {
private readonly ILogger _logger = new Logger<MyClass>(MyLogger.LoggerFactory);
}
根据 Scotts 中的 Ilyas 和 bokibegs 评论,这里是 .NET 5.0 的当前工作代码
using Microsoft.Extensions.Logging
var factory = LoggerFactory.Create(b => b.AddConsole());
var logger = factory.CreateLogger<T>();
这需要Microsoft.Extensions.Logging
和Microsoft.Extensions.Logging.Console
nuget 包。
使用 .NET Core 6 和 NLog 4.7 的完整示例。
do.net new console
do.net add package NLog
NLog.config
1的新文本文件。<?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">
<targets>
<target name="logfile" xsi:type="File" fileName="file.txt" />
<target name="logconsole" xsi:type="Console" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
NLog.config
文件添加到您的项目文件中。<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Include="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="NLog" Version="4.7.13" />
</ItemGroup>
</Project>
var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("Program started.");
logger.Info("Program completed.");
do.net run
。预计 Output
> dotnet run
2022-02-08 17:23:37.0430|INFO|Program|Program started.
2022-02-08 17:23:37.0924|INFO|Program|Program completed.
1 https://github.com/NLog/NLog/wiki/Tutorial#configure-nlog-targets-for-output
我最终做的是使用NLog,而不是使用他们的.NET Core DI扩展,我只包括主NLog NuGet包 ,手动创建我自己的NLog.config
文件,并按照教程 GetCurrentClassLogger()
,创建它作为一个我的类的静态成员,然后直接用于记录。 这是一个非常简单的设置,不需要DI。 NLog应该更好地记录它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.