Ecozum.CommonLogger 1.7.0

E-Çözüm Log Paketi


Loglama Yapılabilecek Kaynaklar

  • File
  • Grafana Loki
  • ElasticSearch
  • MongoDb
  • Http

NOT: MongoDb loglamalarında DateTimeOffset tipi loglanamadığından DateTimeOffset loglamalarda kullanılmamalıdır.

Desteklenen Framework Versiyonları

  • NET Framework 4.6.1 ve üzeri
  • NET Core 3.1
  • NET 5.0

Açıklama

E-Çözüm Log paketi, Serilog kullanılarak tasarlanmıştır. E-Çözüm Log pageti içinde loglama için özel bir sınıf kullanılmayıp, Serilog'un ILogger arayüzü kullanılmaya devam edilmiştir.

Kullanım


.NET Framework

NET Framwork örneğinde Unity Container kullanıldığı varsayılmıştır.

!!! Örnekteki InjectionFactory kullanım şeklideki ContainerControlledLifeTimeManager kullanımına dikkat edilmelidir. Çünkü Singleton olarak kullanılması gerekiyor. Aksi takdirde her ILogger çağırımında ayarlar tekrar yapılandırılacaktır.

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer();

        container.RegisterType<IBarService, BarService>(new HierarchicalLifetimeManager());

        container.RegisterType<ILogger>("", 
            new ContainerControlledLifetimeManager(), 
            new InjectionFactory(c =>
            {
                return EcozumLogFactory.CreateLogger((options) =>
                {
                    var appname = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

                    options
                        .SelfLog(@"C:\debug\serilog-self.log")
                        .AddFileLogger($"c:\\temp\\serilog-test-{appname}.log")
                        .AddGrafanaLoki("http://192.168.54.5:3100", "admin", "1234")
                        .AddMongoDb("mongodb://username:password@ip:port/dbName?authSource=admin", "log")
                        .AddHttp("https://mydomain.com/api/log", new Dictionary<string,string>
                        {
                            { "X-Api-Key", "8s0fg2hg0dcb54n" } 
                        })
                        .With("Network", "Ecozum")
                        .With("Application", appname)
                        .With("TenantCode", (serviceProvider) =>
                        {
                            var fooService = (IBarService)serviceProvider.GetService(typeof(IBarService));

                            return fooService.Get();
                        })
                        .Sanitize();
                }, type => c.Resolve(type));
            })
        );

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
}

using Serilog;

namespace LogSample
{
    public class HomeController: Controller
    {
        private readonly ILogger _logger;

        public HomeController(ILogger logger)
        {
            _logger = logger;
        }

        public ActionResult Index()
        {
            _logger.Information("log parameters: {@parameters}", new{ uuid = Guid.NewGuid() });
        }
    }
}

.NET Core

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            }).UseEcozumLogger((opt) =>
            {
                var appname = Assembly.GetExecutingAssembly().GetName().Name;

                opt.SelfLog(@"C:\debug\serilog-self.log")
                   .AddFileLogger($"c:\\temp\\serilog-test-{appname}.log")
                   .AddGrafanaLoki("http://192.168.54.5:3100", "admin", "1234")
                   .AddElasticSearch("http://nctestelk.e-cozum.com:9200", appname)
                   .AddMongoDb("mongodb://username:password@ip:port/dbName?authSource=admin", "log")
                   .AddHttp("https://mydomain.com/api/log", new Dictionary<string,string>
                   {
                       { "X-Api-Key", "8s0fg2hg0dcb54n" } 
                   })
                   .With("Network", "Ecozum")
                   .With("Application", appname)
                   .With("EnvironmentName", (provider) => 
                   {
                       var env = provider.GetRequiredService<IWebHostEnvironment>();

                       return env.EnvironmentName;
                   })
                   .Sanitize();
                });
    }

Startup.cs

public class Startup
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        //...

        app.UseEcozumRequestLogging(); //Add this line for Request Logging

        //...
    }
}

Sanitize

Sanitize kullanımında varsayılan olarak aşağıdaki alanlar sanitize edilecek şekilde ayarlanmıştır.

cardNumber, cardNo, card, pan, creditCard, cardAlias

name, surname, cardHolderName, cardHolder, ad, soyad, fullName, firstName, lastName

cvv, cvv2, cvc, cv2, cvc2, cvcnumber

expYear, expMonth, expire, expireMonth, expireYear, expireDate, expireDateYear, expireDateMonth

email, eposta

phone, mobile, mobilephone, ceptelefonu, telefon, gsm

password

storekey, merchantsafekey

invoice_addr

tckn, tck

public static IHostBuilder CreateHostBuilder(string[] args)
{
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        }).UseEcozumLogger((opt) =>
        {
            var appname = Assembly.GetExecutingAssembly().GetName().Name;

            opt.AddFileLogger($"c:\\temp\\serilog-test-{appname}.log")
                .Sanitize(san => 
                {
                    san.SanitizeViaRegex("^name", value => $"{value.Substring(0, 2)}***")
                       .Sanitize("Cvv","***", ignoreCase: true)
                       .IgnoreProp(ignoreCase:true, "explanation", "description")
                       .Typed<LoginModel>()
                            .Sanitize(x=>x.Username, username => username.Substring(0,3)+"****");
                });
        });
}

Sanitize ile ilgili detaylı döküman için Serilog.Sanitize


Config dosyası ile yapılandırma

.NET veya .NET Core için appsettings.json, .NET Framework için app.config veya web.config dosyaları ile yapılandırma yapılabilir.

Dosya ile yapılandırmanda Sanitize işlemlerinde bazı sınırlandırmalar mevcuttur

  1. Sadece Regex ile sanitize işlemi yapılabilir
  2. Sanitize işleminde expression kullanılamaz, sanitize yapılacak alana sabit değer verilebilir

.NET Core

appsettings.json

 "EcozumLogger": {
     "File": "C:\\temp\\mylog.log",
     "Elk": {
         "Url": "http://ncelk.netahsilatdemo.com:9200",
         "Index": "abc"
     },
     "MongoDb": {
         "DatabaseUrl": "mongodb://username:password@ip:port/dbName?authSource=admin",
         "Collection": "log"
     },
     "Http":{
         "Url":"https://mydomain.com/api/log",
         "Headers": {
             "X-Api-Key":"scv876bxc78v09"
         }
     }
     "Grafana": "http://192.168.5.54:3100",
     "Sanitize": {
         "Ignore": "ignore1, ignore2",
         "Sanitize": "sanitize1, sanitize2",
         "ReplaceString": "*****",
         "SetDefaults": true
     },
     "With": {
         "Network": "Ecozum"
     },
     "MinimumLevel": "Information",
     "Override": {
         "System": "Information",
         "Microsoft": "Verbose"
     },
     "SelfLog": "C:\\debug\\serilog-self.log"
 }

.NET Framework

app.config veya web.config

<configuration>
  <appSettings>
    <add key="EcozumLog.File.Path" value="C:\\temp\\mylog.log"/>
    <add key="EcozumLog.Http.Url" value="https://mydomain.com/api/log"/>
    <add key="EcozumLog.Http.Header.X-Api-Key" value="sdf5g76490s8d"/>
    <add key="EcozumLog.Elk.Url" value="https://ncelk.netahsilat.com:9200"/>
    <add key="EcozumLog.Elk.Index" value="my-index"/>
    <add key="EcozumLog.MongoDb.DatabaseUrl" value="mongodb://username:password@ip:port/dbName?authSource=admin"/>
    <add key="EcozumLog.MongoDb.Collection" value="log"/>
    <add key="EcozumLog.Grafana.Url" value="http://192.168.54.5:3100"/>
    <add key="EcozumLog.With.Network" value="Ecozum"/>
    <add key="EcozumLog.MinimumLevel" value="Information"/>
    <add key="EcozumLog.Override.System" value="Verbose"/>
    <add key="EcozumLog.Override.Microsoft" value="Warning"/>
    <add key="EcozumLog.Sanitize.Sanitize" value="[Pp]assword"/>
    <add key="EcozumLog.Sanitize.Ignore" value="[Pp]assword"/>
    <add key="EcozumLog.Sanitize.ReplaceString" value="****"/>
    <add key="EcozumLog.Sanitize.SetDefaults" value="true"/>
    <add key="EcozumLog.SelfLog" value="C:\\debug\\serilog-self.log"/>
  </appSettings>
</configuration>

Showing the top 20 packages that depend on Ecozum.CommonLogger.

Packages Downloads
Ecozum.NTH.Increment.Client
Package Description
261

.NET Framework 4.6.2

.NET 5.0

.NET 6.0

.NET Core 3.1

Version Downloads Last updated
1.9.3 278 28.02.2024
1.9.2 174 27.02.2024
1.9.1 147 26.02.2024
1.9.0 169 22.02.2024
1.8.7 192 11.01.2024
1.8.6 152 11.01.2024
1.8.5 196 11.01.2024
1.8.4 223 3.10.2023
1.8.3 187 18.08.2023
1.8.2 165 8.08.2023
1.8.1 161 20.02.2023
1.8.0 279 30.11.2022
1.7.9 251 17.11.2022
1.7.8 265 30.06.2022
1.7.7 206 30.06.2022
1.7.6 205 30.06.2022
1.7.5 197 29.06.2022
1.7.4 173 20.06.2022
1.7.3 202 9.06.2022
1.7.2 185 9.06.2022
1.7.1 215 24.05.2022
1.7.0 176 24.05.2022
1.6.8 184 15.04.2022
1.6.7 173 15.04.2022
1.6.0 217 11.04.2022
1.5.9 260 7.04.2022
1.5.8 167 7.04.2022
1.5.7 181 6.04.2022
1.5.5 171 6.04.2022
1.5.4 171 6.04.2022
1.5.3 153 5.04.2022
1.5.1 179 5.04.2022
1.4.9 188 23.03.2022
1.4.8 172 23.03.2022
1.4.6 184 11.03.2022
1.4.5 176 11.03.2022
1.4.4 166 11.03.2022
1.4.3 153 11.03.2022
1.4.2 166 11.03.2022
1.4.1 182 16.02.2022
1.3.2 149 16.02.2022
1.3.0 187 12.02.2022
1.2.1 187 8.02.2022
1.1.0 184 7.02.2022
1.0.0 187 16.01.2022