我正在构建一个.Net Core3.1控制台应用程序,并且我想使用控制台日志记录功能。关于.net日志记录的文章数不胜数,但我还没有找到一个可以在控制台中实际编写的示例。
namespace test
{
class Program
{
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddLogging(config => config.ClearProviders().AddConsole().SetMinimumLevel(LogLevel.Trace))
.BuildServiceProvider();
//configure console logging
serviceProvider
.GetService<ILoggerFactory>();
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
logger.LogDebug("All done!");
Console.Write("Yup");
}
}
它会编译并运行,甚至会向控制台写入"Yup“,但"All done!”未显示。控制台窗口中的输出:
这是我的示例项目结构:
我遗漏了什么?
这是一个服务的处置:修复感谢Jeremy Lakeman:
static void Main(string[] args)
{
using (var serviceProvider = new ServiceCollection()
.AddLogging(config => config.ClearProviders().AddConsole().SetMinimumLevel(LogLevel.Trace))
.BuildServiceProvider())
{
//configure console logging
serviceProvider
.GetService<ILoggerFactory>();
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
// run app logic
logger.LogDebug("All done!");
}
Console.Write("Yup");
}
发布于 2020-06-20 18:04:04
因此,日志记录不会对程序的性能产生负面影响,它可以异步编写。
释放日志提供程序和其他日志记录类应该会导致日志刷新。
服务提供商还应在处置时处置所有服务。
发布于 2020-11-28 13:25:10
我可能会迟到,但值得添加一些输入,以防万一。我也在努力解决.net内核中的日志记录问题,并且在最新版本中不断有一些破坏性的变化。然而,不能抱怨,因为它变得越来越好。以下是我对发布的.net核心5所做的工作。
public static class ApplicationLogging
{
public static ILoggerFactory LogFactory { get; } = LoggerFactory.Create(builder =>
{
builder.ClearProviders();
// Clear Microsoft's default providers (like eventlogs and others)
builder.AddSimpleConsole(options =>
{
options.IncludeScopes = true;
options.SingleLine = true;
options.TimestampFormat = "hh:mm:ss ";
}).SetMinimumLevel(LogLevel.Warning);
});
public static ILogger<T> CreateLogger<T>() => LogFactory.CreateLogger<T>();
}
static void Main(string[] args)
{
var logger = ApplicationLogging.CreateLogger<Program>();
logger.LogInformation("Let's do some work");
logger.LogWarning("I am going Crazy now!!!");
logger.LogInformation("Seems like we are finished our work!");
Console.ReadLine();
}
https://stackoverflow.com/questions/62454301
复制相似问题