Serilog: Izinkan penyesuaian keluaran teks 'LogLevel'

Dibuat pada 3 Des 2020  ·  4Komentar  ·  Sumber: serilog/serilog

Apakah permintaan fitur Anda terkait dengan masalah?
Saya memiliki persyaratan keras bahwa level log yang dipancarkan oleh aplikasi harus salah satu dari:

  • DEBUG
  • ERROR
  • INFO
  • WARN

Tidak hanya secara semantik, tetapi teks juga harus cocok dengan tepat. Ini karena saya menulis ke agregator log yang sedang digunakan oleh beberapa aplikasi lain menggunakan bahasa dan kerangka kerja yang berbeda, dan mereka telah menstandarisasi level mereka pada string ini.

Kami ingin log kami dapat difilter dan dianalisis menggunakan alat dan kueri yang ada, yang bergantung pada nilai tersebut.

Jelaskan solusi yang Anda inginkan
Mengekspos mekanisme untuk memanipulasi teks yang dihasilkan dari enumerasi LogEvent . Nilai harus sepenuhnya dapat disesuaikan dan dapat diubah.

Idealnya, seseorang akan dapat menyuntikkan semacam IFormatter<LogLevel> yang menerjemahkan nilai enum menjadi teks, dan dimanfaatkan di dalam untuk semua penanganan enum (tidak peduli sink atau formatter teks/json yang digunakan).

Jelaskan alternatif yang telah Anda pertimbangkan
Saya dapat membuat pengaya yang menimpa properti "level" pada setiap peristiwa dengan memeriksa properti LogEvent.Level . Meskipun ini berfungsi, rasanya kurang ideal dan lebih seperti peretasan, karena ini tidak benar-benar "memperkaya" keluaran log, ia menggunakan mekanisme untuk melakukan sesuatu yang lain sepenuhnya.

enhancement

Komentar yang paling membantu

Ohhhh jadi Anda benar-benar melewati formatter Json?! Itu memang _sangat_ menarik Nick... Saya sebenarnya berpikir ini akan sangat berguna bagi saya untuk alasan lain juga, sekarang saya memikirkannya. Ini benar-benar menggabungkan yang terbaik dari kedua dunia.

Kesalahan saya karena tidak membaca seluruh readme dan benar-benar melewatkan contoh Json!

Paket ekspresi ini akan jauh lebih menyenangkan daripada yang saya perkirakan.

Menutup ini karena sekarang sepenuhnya menyelesaikan masalah yang saya usulkan.

Semua 4 komentar

Hai Juliano!

_Serilog.Expressions_ mengimplementasikan ini seperti yang Anda inginkan.

Cara terbersih untuk melakukannya adalah dengan mengimplementasikan pada MapLevel() fungsi yang ditentukan pengguna:

https://github.com/serilog/serilog-expressions#implementing -user-defined-functions

dan gunakan MapLevel() di template keluaran Anda.

Sesuatu seperti:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(new ExpressionTemplate(
        "[{<strong i="15">@t</strong>:HH:mm:ss} {MapLevel(@l)} ({SourceContext})] {@m}\n{@x}"))
    .CreateLogger();

Akan keren untuk mendengar bagaimana Anda melakukannya - sejauh ini tidak ada banyak contoh di luar sana untuk _Serilog.Expressions_ (ini baru) tetapi saya sangat berharap itu akan menjadi bagian inti dari toolkit Serilog, terutama untuk menyesuaikan JSON dan output teks.

HTH!

Hai Nick

Serilog.Expressions mengimplementasikan ini seperti yang Anda inginkan.

Wow! Pertama kali saya mendengar tentang ekstensi ini. Terima kasih telah menunjukkannya kepada saya.

Itu tampaknya cukup gila! Kalian gila karena datang dengan DSL baru untuk itu, pujian!

dan gunakan MapLevel() di template keluaran Anda.

Itu tampaknya bekerja sangat baik untuk logging berbasis teks, tetapi masalahnya adalah saya saat ini menggunakan formulir json kompak. Pemahaman saya dari membaca cepat apa yang diizinkan Ekspresi, adalah bahwa saat ini hanya mendukung aliran menggunakan ITextFormatter .

Bagi saya sepertinya ada kait yang hilang di antara konversi C# LogEvent ke properti aktual yang sedang ditulis. Idealnya, solusi di sana akan berfungsi untuk format "output" apa pun, baik itu teks, atau json.

Sudah selangkah lebih maju, @julealgon! :-) _Serilog.Expressions_ dirancang untuk sepenuhnya mendukung JSON:

    .WriteTo.Console(new ExpressionTemplate(
        "{ {<strong i="6">@t</strong>, <strong i="7">@mt</strong>, <strong i="8">@l</strong>: MapLevel(@l), <strong i="9">@x</strong>, ..@p} }\n"))

https://github.com/serilog/serilog-expressions#formatting

Ohhhh jadi Anda benar-benar melewati formatter Json?! Itu memang _sangat_ menarik Nick... Saya sebenarnya berpikir ini akan sangat berguna bagi saya untuk alasan lain juga, sekarang saya memikirkannya. Ini benar-benar menggabungkan yang terbaik dari kedua dunia.

Kesalahan saya karena tidak membaca seluruh readme dan benar-benar melewatkan contoh Json!

Paket ekspresi ini akan jauh lebih menyenangkan daripada yang saya perkirakan.

Menutup ini karena sekarang sepenuhnya menyelesaikan masalah yang saya usulkan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat