Ecozum.CommonLogger.NetFramework 1.7.1

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>

No packages depend on Ecozum.CommonLogger.NetFramework.

Version Downloads Last updated
1.9.3 187 28.02.2024
1.9.2 162 27.02.2024
1.9.1 146 26.02.2024
1.9.0 144 22.02.2024
1.8.1 200 3.10.2023
1.8.0 183 18.08.2023
1.7.9 150 8.08.2023
1.7.8 217 17.01.2023
1.7.7 177 30.11.2022
1.7.6 228 30.06.2022
1.7.5 145 29.06.2022
1.7.4 182 20.06.2022
1.7.2 195 25.05.2022
1.7.1 176 24.05.2022
1.7.0 142 24.05.2022
1.6.9 177 28.04.2022
1.6.8 151 15.04.2022
1.6.7 157 15.04.2022
1.6.0 182 11.04.2022
1.5.9 169 10.04.2022