Ecozum.CommonLogger 1.9.3

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": {
         "Path": "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": {
         "Url": "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
262

.NET Framework 4.6.2

.NET Core 3.1

.NET 6.0

Version Downloads Last updated
1.9.3 279 28.02.2024
1.9.2 175 27.02.2024
1.9.1 148 26.02.2024
1.9.0 170 22.02.2024
1.8.7 193 11.01.2024
1.8.6 153 11.01.2024
1.8.5 197 11.01.2024
1.8.4 224 3.10.2023
1.8.3 188 18.08.2023
1.8.2 166 8.08.2023
1.8.1 162 20.02.2023
1.8.0 280 30.11.2022
1.7.9 252 17.11.2022
1.7.8 266 30.06.2022
1.7.7 207 30.06.2022
1.7.6 206 30.06.2022
1.7.5 198 29.06.2022
1.7.4 174 20.06.2022
1.7.3 203 9.06.2022
1.7.2 186 9.06.2022
1.7.1 216 24.05.2022
1.7.0 177 24.05.2022
1.6.8 185 15.04.2022
1.6.7 174 15.04.2022
1.6.0 218 11.04.2022
1.5.9 261 7.04.2022
1.5.8 168 7.04.2022
1.5.7 182 6.04.2022
1.5.5 172 6.04.2022
1.5.4 172 6.04.2022
1.5.3 154 5.04.2022
1.5.1 180 5.04.2022
1.4.9 189 23.03.2022
1.4.8 173 23.03.2022
1.4.6 185 11.03.2022
1.4.5 177 11.03.2022
1.4.4 167 11.03.2022
1.4.3 154 11.03.2022
1.4.2 167 11.03.2022
1.4.1 183 16.02.2022
1.3.2 150 16.02.2022
1.3.0 188 12.02.2022
1.2.1 188 8.02.2022
1.1.0 185 7.02.2022
1.0.0 188 16.01.2022