08.04.2022 akış

Program.cs içinde App'imize serilog ekliyoruz.
Aşağıdaki kütüphaneleri nuget üzerinden yüklüyoruz
Serilog.AspNetCore
Serilog.Exceptions
Serilog.Extensions.Logging
Serilog.Sinks.Console
Serilog.Sinks.RollingFile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    public static int Main(string[] args)
        {



            //Loglamayı başlatıyoruz
            ILogger logger = new LoggerConfiguration()
                                .MinimumLevel.Information()
                                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                                .MinimumLevel.Override("Microsoft.AspNetCore.Mvc", LogEventLevel.Error)
                                .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                                //.Enrich.FromLogContext()
                                .Enrich.WithExceptionDetails()
                                //.WriteTo.Console()
                                .WriteTo.File(path:@"Logs/AppStatus.txt",
                                              rollingInterval: RollingInterval.Hour,
                                              formatter: new JsonFormatter(renderMessage: true))
                                .CreateLogger();

            try
            {
                logger.Information("Starting CrmApp");

                CreateHostBuilder(args).Build().Run();
                return 0;
            }
            catch (Exception ex)
            {
                logger.Fatal(ex, "App terminated unexpectedly");
                return 1;
            }
            finally
            {

                Log.CloseAndFlush();
            }

        }

Register edeceğimiz host servis kısmını loglamak için aşağıdaki yapıya serilog ekliyoruz

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration((app, config) =>
                            {
                                config.AddJsonFile("appsettings.json");
                                config.AddJsonFile($"appsettings.{Env}.json");
                            })

                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureKestrel(options => options.AddServerHeader = false);
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog((hostContext, configuration) =>
                {

                    configuration.ReadFrom.Configuration(hostContext.Configuration)
                    .MinimumLevel.Information()
                    .Enrich.WithExceptionDetails()
                    .WriteTo.File(path: @"Logs/AppListener.txt",
                                              rollingInterval: RollingInterval.Hour,
                                              formatter: new JsonFormatter(renderMessage: true));
                    
                
                                
                });

 Middleware oluşturuyoruz.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 public static class ApplicationBuilderExtensions
    {
        public static BackgroundLeadCheckTask Listener { get; set; }
        
        public static IApplicationBuilder UseEventListener(this IApplicationBuilder app)
        {
            
            var life = app.ApplicationServices.GetService<IHostApplicationLifetime>();
            Listener = new BackgroundLeadCheckTask(app.ApplicationServices.GetService<ICustomerApiClient>(),
                                                   app.ApplicationServices.GetService<ILogger>());
            life.ApplicationStarted.Register(OnStarted);
            life.ApplicationStopping.Register(OnStopping);

            return app;
        }

        private static void OnStarted()
        {
            Listener.Start(TimeSpan.FromSeconds(10));
        }

        private static void OnStopping()
        {
            Task.Run(async () => { await Listener.StopAsync(); }); 
        }

  Background taskımızı yazarken dotnet 6.0 yeni zamanlama apilerinden periodic timer kullanıyoruz.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 public class BackgroundLeadCheckTask
    {


        private Task _timerTask;       
        private readonly CancellationTokenSource _cts = new();
        private readonly ICustomerApiClient _customerApiClient;
        private readonly ILogger _logger;
        public BackgroundLeadCheckTask(ICustomerApiClient customerApiClient, ILogger logger)
        {
            _customerApiClient = customerApiClient;
            _logger = logger;
        }
       

        public void Start(TimeSpan timespan)
        {

            async Task DoStart()
            {
                try
                {
                    var timer = new PeriodicTimer(timespan);
                    while (await timer.WaitForNextTickAsync(_cts.Token))
                    {
                        
                        _logger.Information($"{DateTime.Now}");
                        
                    }
                }
                catch (OperationCanceledException ex)
                {
                    _logger.Error($"{ex.Message}");                    
                    _cts.Cancel();
                }


            }

            _timerTask = DoStart();
            FirstInit();
        }
        public Task FirstInit()
        {
           _logger.Information($"ilk kod çağırıldı ve cache alınacak {DateTime.Now}");
            return Task.CompletedTask;
        }
        public async Task StopAsync()
        {
            _cts.Cancel();
            await _timerTask;
            _cts.Dispose();
            _logger.Information($"BackgroundTask cancelled {DateTime.Now}");
            
        }
    }

 Startup.cs içinde oluşturduğumuz middleware'i Configure metodu içine register ediyoruz

1
2
3
4
5
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            
            app.UseEventListener();
        }

Yorumlar

Bu blogdaki popüler yayınlar

22.06.2020 - 26.06.2020 arası işler

Asp.net RestSharp ile data post etmek

List Box Item içindeki elemanları aşağı veya yukarı taşımak