如何在控制台应用程序中存储日志文件

时间:2020-10-07 08:21:48

标签: c# asp.net-mvc asp.net-core

我正在使用Asp.net core 3.1并尝试保存日志文件。我可以通过添加“ loggerFactory.AddFile(” / Logs / mylog- {Date} .txt“);”在Web应用程序中存储日志文件。到startup.cs文件中,但是我无法将日志文件存储在控制台应用程序中。

class Program
    {
        //public static IConfiguration Configuration { get; }
        private static AppDbContext _context;
        private static IServiceProvider _service;
        public static IConfigurationRoot Configuration;
        public static IOptions<ServiceEndpoint> _endpoint;
        private static ILogger<CallService> _logger;

        static async Task Main(string[] args)
        {
            try
            {
                Console.OutputEncoding = Encoding.UTF8;
                var services = new ServiceCollection();
                var builder = new ConfigurationBuilder()
                    .SetBasePath(Path.Combine(AppContext.BaseDirectory))
                    .AddJsonFile("appsettings.json", optional: true);

                Configuration = builder.Build();

                services.AddDbContext<AppDbContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Scoped);
                
                services.AddLogging();
                
                using (var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()))
                {
                    loggerFactory.AddFile("/Logs/mylog-{Date}.txt");
                }

                var serviceProvider = services.BuildServiceProvider();
                }
                _logger.LogInformation("Process runnning");
               }
               catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                _logger.LogError(ex.InnerException.ToString());
            }
              }

1 个答案:

答案 0 :(得分:0)

根据您的代码,我想您正在使用Serilog.Extensions.Logging.File库将日志信息存储到文件中,对吗?我已经检查过its resource document,但是找不到有关如何在控制台应用程序中使用它的文章。因此,作为一种解决方法,我建议您尝试使用Serilog library将日志信息存储到文件中。

要将日志信息存储在控制台应用程序中,可以参考以下步骤:

  1. 通过Nuget安装Serilog.Sinks.ConsoleSerilog.Sinks.Console软件包。

  2. 创建记录器。

         Log.Logger = new LoggerConfiguration()
                  .MinimumLevel.Debug()
                  .WriteTo.File("log.txt")  // log file.
                  .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Information)
                  .CreateLogger();
    

    下面的示例代码(添加SerilogSerilog.Events名称空间):

         static void Main(string[] args)
         {
             Log.Logger = new LoggerConfiguration()
                      .MinimumLevel.Debug()
                      .WriteTo.File("log.txt")
                      .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Information)
                      .CreateLogger(); 
             try
             {
                 Log.Information("Starting up"); 
             }
             catch (Exception ex)
             {
                 Log.Fatal(ex, "Application start-up failed");
             }
             finally
             {
                 Log.CloseAndFlush();
             }
             Console.WriteLine("Hello World!");
             Console.ReadKey();
         }
    

    有关使用Serilog的更多详细信息,请检查Serilog Configuration Basics