Sink serilog yang mengirim acara dan log langsung ke Datadog. Secara default wastafel mengirimkan log melalui https
Paket - serilog.sinks.datadog.logs | Platform - .NET 4.5, .NET 4.6.1, .NET 4.7.2, NetStandard1.3, NetStandard2.0
Catatan: Untuk versi .net lainnya, pastikan bahwa versi TLS default yang digunakan adalah 1.2
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// Some code
} Secara default log diteruskan ke Datadog melalui HTTPS di port 443 ke situs AS. Anda dapat mengubah situs menjadi EU dengan menggunakan properti url dan mengaturnya ke https://http-intake.logs.datadoghq.eu .
Anda dapat mengganti perilaku default dan menggunakan penerusan TCP dengan menentukan secara manual properti berikut (URL, port, USESSL, USETCP).
Anda juga dapat menambahkan properti berikut (sumber, layanan, host, tag) ke wastafel serilog.
var config = new DatadogConfiguration ( url : " intake.logs.datadoghq.com " , port : 10516 , useSSL : true , useTCP : true ) ;
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs (
" <API_KEY> " ,
source : " <SOURCE_NAME> " ,
service : " <SERVICE_NAME> " ,
host : " <HOST_NAME> " ,
tags : new string [ ] { " <TAG_1>:<VALUE_1> " , " <TAG_2>:<VALUE_2> " } ,
configuration : config
)
. CreateLogger ( ) )
{
// Some code
} Mengirim log berikut:
using ( var log = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) )
{
// An example
var position = new { Latitude = 25 , Longitude = 134 } ;
var elapsedMs = 34 ;
log . Information ( " Processed {@Position} in {Elapsed:000} ms. " , position , elapsedMs ) ;
}atau
Log . Logger = new LoggerConfiguration ( )
. WriteTo . DatadogLogs ( " <API_KEY> " )
. CreateLogger ( ) ;
// An example
var position = new { Latitude = 25 , Longitude = 134 } ;
var elapsedMs = 34 ;
Log . Information ( " Processed {@Position} in {Elapsed:000} ms. " , position , elapsedMs ) ;
Log . CloseAndFlush ( ) ;Di platform, log terlihat seperti objek JSON berikut:
{
"message" : " Processed { Latitude: 25, Longitude: 134 } in 034 ms. " ,
"MessageTemplate" : " Processed {@Position} in {Elapsed:000} ms. " ,
"timestamp" : " 2022-11-23T09:48:56.0262350-05:00 " ,
"level" : " Information " ,
"Properties" : {
"Position" : {
"Latitude" : 25 ,
"Longitude" : 134
},
"Elapsed" : 34
},
"Renderings" : [
" 034 "
]
}appsettings.json Sejak 0.2.0, Anda dapat mengonfigurasi wastafel data dengan menggunakan file appsettings.json dengan paket serilog.settings.configuration.
Dalam array "Serilog.WriteTo" , tambahkan entri untuk DatadogLogs . Contoh ditunjukkan di bawah ini:
"Serilog" : {
"Using" : [ " Serilog.Sinks.Console " , " Serilog.Sinks.Datadog.Logs " ],
"MinimumLevel" : " Debug " ,
"WriteTo" : [
{ "Name" : " Console " },
{
"Name" : " DatadogLogs " ,
"Args" : {
"apiKey" : " <API_KEY> " ,
"source" : " <SOURCE_NAME> " ,
"host" : " <HOST_NAME> " ,
"tags" : [ " <TAG_1>:<VALUE_1> " , " <TAG_2>:<VALUE_2> " ],
"configuration" : {
"url" : " intake.logs.datadoghq.com " ,
"port" : 10516 ,
"useSSL" : true ,
"useTCP" : true
}
}
}
],
"Enrich" : [ " FromLogContext " , " WithMachineName " , " WithThreadId " ],
"Properties" : {
"Application" : " Sample "
}
} Catatan: Bagian configuration adalah opsional sehingga Anda dapat mengganti default.
Anda dapat mengimplementasikan ITextFormatter khusus dan meneruskannya ke wastafel untuk mengubah format log Anda. Ini berguna jika Anda ingin menambah/menghapus/memodifikasi bidang dari payload JSON akhir, atau memancarkan log non-JSON ke DataDog.
Ada beberapa opsi untuk mengimplementasikan formatter kustom. Cara termudah adalah dengan menggunakan ekspresi serilog. Di bawah ini adalah contoh ITextFormatter ekspresi serilog yang menjatuhkan bidang MessageTemplate :
public class DatadogJsonNoTemplateFormatter : ExpressionTemplate
{
public DatadogJsonNoTemplateFormatter ( ) : base ( @"{ {
Timestamp: @t,
level: @l,
message: @m,
Properties: {..@p},
Renderings: @r}
}" ) { }
} Jika Anda tidak dapat menggunakan ekspresi serilog karena kompatibilitas kerangka kerja-Anda dapat mengimplementasikannya sendiri dengan JsonValueFormatter atau implementasi default:
DatadogLogs mendukung argumen berikut:
| argumen | Jenis | Keterangan |
|---|---|---|
apiKey | string | Kunci API DataDog Anda. |
source | string | Nama integrasi. |
service | string | Nama layanan. |
host | string | Nama host. |
tags | string[] | Tag khusus. |
configuration | DatadogConfiguration | Datadog mencatat konfigurasi klien. |
restrictedToMinimumLevel | LogEventLevel | Level log minimum untuk wastafel. |
batchSizeLimit | int | Jumlah maksimum acara untuk dipancarkan dalam satu batch. |
batchPeriod | TimeSpan | Waktu untuk menunggu sebelum memancarkan batch acara baru. |
queueLimit | int | Jumlah peristiwa maksimum yang harus diadakan dalam antrian internal wastafel, atau null untuk antrian yang tidak terikat. Defaultnya adalah 10000 |
exceptionHandler | Action<Exception> | Fungsi ini dipanggil ketika pengecualian terjadi saat menggunakan DatadogConfiguration.UseTCP=false (konfigurasi default). |
detectTCPDisconnection | bool | Mendeteksi kapan koneksi TCP hilang dan menciptakan kembali koneksi baru. |
formatter | ITextFormatter | Implementasi formatter khusus untuk mengubah format log |
maxMessageSize | int | Ukuran maksimum dalam byte pesan sebelum dibagi menjadi potongan -potongan |
Catatan: Jika maxMessageSize melebihi batas API yang didokumentasikan dari 1MB - Payload yang lebih besar dari 1MB akan dijatuhkan oleh asupan.
Bump Versi di src/Serilog.Sinks.Datadog.Logs.csproj dan gabungkan cabang Anda
Jalankan perintah ini di folder root proyek
git checkout master && git pull
msbuild Serilog.Sinks.Datadog.Logs.sln /t:restore /p:Configuration=Release
msbuild Serilog.Sinks.Datadog.Logs.sln /t:pack /p:Configuration=Release Anda dapat menemukan file .nupkg di src/Serilog.Sinks.Datadog.Logs/bin/Release/Serilog.Sinks.Datadog.Logs.<version>.nupkg
Seperti Serilog.Sinks.Datadog.Logs mengimplementasikan serilog.sinks.periodicbatching, menggunakan serilog.sinks.async tidak dianjurkan.
Dari serilog.sinks.async Documentation:
Catatan: Banyak wastafel berbasis jaringan (CouchDB, Elasticsearch, MongoDB, SEQ, Splunk ...) sudah melakukan batching asinkron secara asli dan tidak mendapat manfaat dari pembungkus ini.