Ecozum.CommonLogger.NetFramework 1.7.8
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
- Sadece Regex ile sanitize işlemi yapılabilir
- 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>
No packages depend on Ecozum.CommonLogger.NetFramework.
.NET Framework 4.6.2
- Serilog (>= 2.10.0)
- Serilog.Enrichers.AssemblyName (>= 1.0.9)
- Serilog.Enrichers.ClientInfo (>= 1.1.4)
- Serilog.Enrichers.CorrelationId (>= 3.0.1)
- Serilog.Enrichers.Environment (>= 2.2.0)
- Serilog.Sanitize (>= 1.1.4)
- Serilog.Sinks.Async (>= 1.5.0)
- Serilog.Sinks.Elasticsearch (>= 8.4.1)
- Serilog.Sinks.File (>= 5.0.0)
- Serilog.Sinks.Grafana.Loki (>= 7.1.1)
- Serilog.Sinks.Http (>= 7.2.0)
- Serilog.Sinks.MSSqlServer (>= 5.7.0)
- Serilog.Sinks.MongoDB (>= 5.1.2)
| 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 |