如何在 .net core worker 服务中保存登录文件?

问题描述 投票:0回答:4

现在,我正在开发 .Net 核心工作者服务,我想将我项目的错误保存在一个文件(文本文件)中 我找不到任何设置

  .ConfigureLogging((hostingContext, logging) =>
                  {
                      logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                      logging.AddEventLog(new EventLogSettings()
                      {
                          SourceName = "CallerTestCacheServiceCoreAPI",
                          LogName = "CallerTestCacheServiceCoreAPILog",

                      });
                  })

asp.net-core backgroundworker
4个回答
2
投票

我像这个项目一样在另一个类中添加了一个扩展方法 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!");  
}

成功了


1
投票

在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);

希望这有帮助。


0
投票

如果您真的需要,有几个第三方提供商可以处理日志汇到文件。

serilog 是一个很好的例子,请查看下面的自述文件

https://github.com/serilog/serilog-sinks-file


0
投票

要使用

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 项目相同的托管系统。

© www.soinside.com 2019 - 2024. All rights reserved.