现在,我正在开发 .Net 核心工作者服务,我想将我项目的错误保存在一个文件(文本文件)中 我找不到任何设置
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddEventLog(new EventLogSettings()
{
SourceName = "CallerTestCacheServiceCoreAPI",
LogName = "CallerTestCacheServiceCoreAPILog",
});
})
我像这个项目一样在另一个类中添加了一个扩展方法 https://github.com/MV10/Serilog.Dependency.Injection
public static IServiceCollection AddSerilogServices(this IServiceCollection services)
{
return services.AddSerilogServices(
new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.File("log.txt")
//.WriteTo.File(new CompactJsonFormatter(), "log.txt")
.WriteTo.Console());
}
并在program.cs services中引入
services.AddSerilogServices();
在我的工人阶级中:
readonly Serilog.ILogger _log;
public Worker( Serilog.ILogger log)
{
_log = log;
log.Information("Hello World!");
}
成功了
在Main方法(程序类)中:
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
在 IHostBuilder 方法中,添加
UseSerilog()
:
Host.CreateDefaultBuilder(args)
.UseSerilog()
在您的控制器中,使用 DI 获取记录器的实例,添加以下内容:
public class MyController: Controller
{
private ILogger _logger;
public MyController(ILogger<MyController> logger)
{
_logger = logger;
}
}
要记录消息,请使用
_logger
实例,例如:
_logger.LogInformation("User {user} logged in", user_record);
希望这有帮助。
如果您真的需要,有几个第三方提供商可以处理日志汇到文件。
serilog 是一个很好的例子,请查看下面的自述文件
要使用
Serilog
记录器,请将您的 Program
类更改为:
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.CreateLogger();
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// Add your services and workers here
services.AddHostedService<Worker>();
})
.UseSerilog((hostingContext, services, loggerConfiguration) =>
loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration));
}
在您的
appsettings.json
中删除"Logging"
部分并将其替换为"Serilog"
部分(如here所述)或在代码中指定设置。
此答案基于
Serilog
库(链接)为 asp net core sink 提供的说明,因为 Worker
模板使用与 asp net core 项目相同的托管系统。