SlideShare a Scribd company logo
Serilog & Seq
Doruk Uluçay
Senior Backend Developer @ InGame Group
A Little
Review unto
Logging
Why we are logging
Logging has a crucial part to play in a scenario
where you can’t use interactive debugging (that is,
attaching a debugger like Visual Studio). It allows
us to investigate errors after the problem already
happened. In some cases, like Production
Debugging, logs might be the only information you
have.[1]
Logging Best Practises
● Use log levels appropriately[1]
● Only high severity logs in prod[1]
● Log all exceptions[1]
Logging Best Practises
● Implement logging in all projects. You always
end up needing it at some point.[2]
Logging Best Practises - my advices
● Consider logging http context when needed.
It’s very easy with modern libraries.
● Consider using structured logging when
needed
● Log everything when working with 3rd party
services
Logging
Frameworks
for .NET
log4net, NLog, Serilog
log4net
● Started in 2001
● .NET port of log4j
● A lot of configuration
● The old one - avoid
log4net, NLog, Serilog
NLog
● Made for .NET
● Better api
● Less configuration
● Still in very good shape.
log4net, NLog, Serilog
Serilog
● Introduced structured logging
● Even lesser configuration
● Even simpler API
● The new one. Best of three. NLog with sugar on top. Adopt it.
log4net, NLog, Serilog
Microsoft.Extensions.Logging
● Introduced with .NET Core
● Both abstraction and implementation
● Common practise is to use abstractions of it with NLog or Serilog
behind
log4net, NLog, Serilog - Log Levels
log4net NLog Serilog .NET Core
Logging
Fatal Fatal Fatal Critical
Error Error Error Error
Warn Warn Warning Warning
Info Info Information Information
Debug Debug Debug Debug
- Trace Verbose Trace
Whichever you are gonna use, use them with abstractions introduced with .NET Core Logging.
log4net, NLog, Serilog
log4net: Appender
NLog: Target
Serilog: Sink
Serilog
Install
> Install-Package Serilog
> Install-Package Serilog.Sinks.Console
For beginning;
Setup
var logger = new
LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();
For beginning;
Usage
log.Information("Hello,
Serilog!");
Basic use
Structured logging
var name = "Doruk";
Log.Information("Hello, {Name}!", name
);
[21:38:02 INF] Hello, Doruk!
Looks like just string.format, isn’t it ?
No it isn’t really. We’ll come to that later.
Global Logger
Log.Logger =
new LoggerConfiguration()
.WriteTo.Console().CreateLogger();
Log.Information("Hi from global
logger");
A static logger to use from anywhere
Output formatting
var logger =
new LoggerConfiguration()
.WriteTo.File("log.txt", outputTemplate:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}
[{Level:u3}]
{Message:lj}{NewLine}{Exception}").
CreateLogger();
Timestamp
here is an
Enricher.
More on to
that later
u3 here
means first
three
characters,
uppercase
Global Log Level & Overrides
Log.Logger =
new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console(restrictedToMinimumLevel:
Serilog.Events.LogEventLevel.Fatal)
CreateLogger();
Dynamic Level Switch
var levelSwitch = new LoggingLevelSwitch();
levelSwitch.MinimumLevel =
LogEventLevel.Warning;
var log = new LoggerConfiguration()
.MinimumLevel.ControlledBy(levelSwitch)
.WriteTo.ColoredConsole()
.CreateLogger();
Enrichers - 1 - Code
.WriteTo.File("log.txt", outputTemplate:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}]
Version:{Version} {Message:lj}{NewLine}{Exception}")
.Enrich.WithProperty("Version", "1.0.0")
Enrichers - 2 - Output
2020-06-02 22:00:47.826 +03:00 [INF] Version:1.0.0
Hello, Doruk!
Filters
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.Filter
.ByExcluding(Matching.WithProperty<int>("Count",
p => p < 10))
.CreateLogger();
Some Sinks
● Amazon Cloudwatch
● Amazon Dynamodb
● Amazon S3
● Application Insights
● Azure Analytics
● Couchdb
● log4net
● Mongodb
● New Relic
● NLog
● Rabbitmq
● Slack
● Seq
● Telegram
● MSSQL
● MySQL
● LiteDB
Structured
Logging
What is structured logging
A better way to capture and render log messages for machine and
human use.[4]
In structured logging logs are saved in raw json format that contains
your message format and data.
Unstructured logging
//code
log("User %s logged in from %s", username,
ipAddress);
//output
2016-05-27T13:02:11.888 User alice logged in from
123.45.67.89
Lets leave it behind.
Structured Logging
log("User {username} logged in from
{ip_address}", username, ipAddress)
Same logging code
Structured Logging
2016-05-27T13:02:11.888 User alice logged in from
123.45.67.89
Same message, but rendered
Structured Logging
{
"time": "2016-05-27T13:02:11.888",
"template": "User {username} logged in from {ip_address}",
"username": "alice",
"ip_address": "123.45.67.89"
}
Aaaaand the way we store it
Seq
Seq - what is it
Seq is a platform that has in it;
● Log store
● Visualizer
● Rest api for directly logging to it
Seq - what is it
Seq is built for modern structured logging with
message templates. Rather than waste time and effort
trying to extract data from plain-text logs with fragile
log parsing, the properties associated with each log
event are captured and sent to Seq in a clean JSON
format. Message templates are supported natively by
ASP.NET Core, Serilog, NLog, and many other libraries,
so your application can use the best available
diagnostic logging for your platform.
Seq - what is it
● It’s a log server. Store your logs in it.
● Use it’s ui to filter logs
● Create charts, analyze
● Integrate it to slack or equivalent for alerts
Serilog & Seq
doing
structured
logging
Serilog & Seq doing structured
logging
public class AccountInformation
{
public string Owner { get; set; }
public decimal Balance { get; set; }
public Dictionary<DateTime, decimal> Transactions { get; set; }
}
Assume we have this class
Serilog & Seq doing structured
logging
var info = new AccountInformation()
{
Balance = 1000,
Owner = "Doruk",
Transactions = new System.Collections.Generic.Dictionary<DateTime, decimal>()
{
[DateTime.Now] = 100,
[DateTime.Now.AddDays(-1)] = 200
}
};
Log.Information("New Account Added {@account}", info);
And we log it to Seq through Serilog this way
Serilog & Seq doing structured
logging
This is what we get at Seq UI
Serilog & Seq doing structured
logging
{
"@t": "2020-06-03T17:50:29.6174552+03:00",
"@mt": "New Account Added {@info}",
"@m": "New Account Added {rn "Owner": "Doruk",rn "Balance": 1068,rn "Transactio",
"@i": "7990e46d",
"info": {
"Owner": "Doruk",
"Balance": 1068,
"Transactions": {
"3.06.2020 17:50:29": 78,
"2.06.2020 17:50:29": 89
},
"_typeTag": "AccountInformation"
}
}
Stored json. m is message, mt is template.
Serilog & Seq doing structured
logging
Navigate easily with SQL like language
Conclusion
My humble conclusion is
● NLog is still great but Serilog is easier to use
and has more to offer.
● Structured logging is a lifesaver if we write lots
of logs that has data fused with them.
● Platforms like Seq helps a lot while dealing with
logs.
References
● [1] https://michaelscodingspot.com/dotnet-debugging-tools/
● [2] .NET Web Application Logging Essentials by Thomas Ardal
● [3]https://github.com/serilog/serilog/wiki
● [4]https://messagetemplates.org/
Thanks a lot.
Doruk Uluçay

More Related Content

What's hot (20)

PDF
Structured and centralized logging with serilog
Denis Missias
 
PPTX
Integrating Microservices with Apache Camel
Christian Posta
 
PPTX
Rest API with Swagger and NodeJS
Luigi Saetta
 
PPTX
Springboot Microservices
NexThoughts Technologies
 
ODP
Introduction to Swagger
Knoldus Inc.
 
PDF
Building Microservices with gRPC and NATS
Shiju Varghese
 
PDF
Suite Script 2.0 API Basics
Jimmy Butare
 
PPTX
Lombok
Amit Aggarwal
 
PDF
PDOでデータベース接続と SQLインジェクション対策
iPride Co., Ltd.
 
PDF
Dallas Mulesoft Meetup - Log Aggregation and Elastic Stack on Anypoint Platform
Adam DesJardin
 
PDF
Building a fully managed stream processing platform on Flink at scale for Lin...
Flink Forward
 
PDF
Microservices with Spring Boot Tutorial | Edureka
Edureka!
 
PDF
Swagger With REST APIs.pptx.pdf
Knoldus Inc.
 
PPTX
User Management Life Cycle with Keycloak
Muhammad Edwin
 
PPTX
Secure your app with keycloak
Guy Marom
 
PPTX
C# Async Await
Simplilearn
 
PDF
Swagger / Quick Start Guide
Andrii Gakhov
 
PPTX
Reactive programming intro
Ahmed Ehab AbdulAziz
 
PDF
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
 
Structured and centralized logging with serilog
Denis Missias
 
Integrating Microservices with Apache Camel
Christian Posta
 
Rest API with Swagger and NodeJS
Luigi Saetta
 
Springboot Microservices
NexThoughts Technologies
 
Introduction to Swagger
Knoldus Inc.
 
Building Microservices with gRPC and NATS
Shiju Varghese
 
Suite Script 2.0 API Basics
Jimmy Butare
 
PDOでデータベース接続と SQLインジェクション対策
iPride Co., Ltd.
 
Dallas Mulesoft Meetup - Log Aggregation and Elastic Stack on Anypoint Platform
Adam DesJardin
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Flink Forward
 
Microservices with Spring Boot Tutorial | Edureka
Edureka!
 
Swagger With REST APIs.pptx.pdf
Knoldus Inc.
 
User Management Life Cycle with Keycloak
Muhammad Edwin
 
Secure your app with keycloak
Guy Marom
 
C# Async Await
Simplilearn
 
Swagger / Quick Start Guide
Andrii Gakhov
 
Reactive programming intro
Ahmed Ehab AbdulAziz
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Toshiaki Maki
 

Similar to Logging, Serilog, Structured Logging, Seq (20)

PDF
Application Logging in the 21st century - 2014.key
Tim Bunce
 
ODP
Fedora Developer's Conference 2014 Talk
Rainer Gerhards
 
ODP
Log Management Systems
Mehdi Hamidi
 
PPT
Logging with Logback in Scala
Knoldus Inc.
 
PDF
Hack Like It's 2013 (The Workshop)
Itzik Kotler
 
PDF
Profiling the logwriter and database writer
Kyle Hailey
 
PDF
Docker Logging and analysing with Elastic Stack
Jakub Hajek
 
PDF
Docker Logging and analysing with Elastic Stack - Jakub Hajek
PROIDEA
 
PDF
GrayLog for Java developers FOSDEM 2018
Jose Manuel Ortega Candel
 
PDF
Go debugging and troubleshooting tips - from real life lessons at SignalFx
SignalFx
 
PDF
Eko10 - Security Monitoring for Big Infrastructures without a Million Dollar ...
Hernan Costante
 
ODP
Node js lecture
Darryl Sherman
 
ODP
Turbo charge your logs
Jeremy Cook
 
PDF
.NET @ apache.org
Ted Husted
 
PDF
Syslog Centralization Logging with Windows ~ A techXpress Guide
Abhishek Kumar
 
PDF
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Spark Summit
 
PDF
Distributed real time stream processing- why and how
Petr Zapletal
 
PPT
LOGBack and SLF4J
jkumaranc
 
PPT
LOGBack and SLF4J
jkumaranc
 
Application Logging in the 21st century - 2014.key
Tim Bunce
 
Fedora Developer's Conference 2014 Talk
Rainer Gerhards
 
Log Management Systems
Mehdi Hamidi
 
Logging with Logback in Scala
Knoldus Inc.
 
Hack Like It's 2013 (The Workshop)
Itzik Kotler
 
Profiling the logwriter and database writer
Kyle Hailey
 
Docker Logging and analysing with Elastic Stack
Jakub Hajek
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
PROIDEA
 
GrayLog for Java developers FOSDEM 2018
Jose Manuel Ortega Candel
 
Go debugging and troubleshooting tips - from real life lessons at SignalFx
SignalFx
 
Eko10 - Security Monitoring for Big Infrastructures without a Million Dollar ...
Hernan Costante
 
Node js lecture
Darryl Sherman
 
Turbo charge your logs
Jeremy Cook
 
.NET @ apache.org
Ted Husted
 
Syslog Centralization Logging with Windows ~ A techXpress Guide
Abhishek Kumar
 
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Spark Summit
 
Distributed real time stream processing- why and how
Petr Zapletal
 
LOGBack and SLF4J
jkumaranc
 
LOGBack and SLF4J
jkumaranc
 
Ad

Recently uploaded (20)

PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PPTX
Tally software_Introduction_Presentation
AditiBansal54083
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Tally software_Introduction_Presentation
AditiBansal54083
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Ad

Logging, Serilog, Structured Logging, Seq

  • 1. Serilog & Seq Doruk Uluçay Senior Backend Developer @ InGame Group
  • 3. Why we are logging Logging has a crucial part to play in a scenario where you can’t use interactive debugging (that is, attaching a debugger like Visual Studio). It allows us to investigate errors after the problem already happened. In some cases, like Production Debugging, logs might be the only information you have.[1]
  • 4. Logging Best Practises ● Use log levels appropriately[1] ● Only high severity logs in prod[1] ● Log all exceptions[1]
  • 5. Logging Best Practises ● Implement logging in all projects. You always end up needing it at some point.[2]
  • 6. Logging Best Practises - my advices ● Consider logging http context when needed. It’s very easy with modern libraries. ● Consider using structured logging when needed ● Log everything when working with 3rd party services
  • 8. log4net, NLog, Serilog log4net ● Started in 2001 ● .NET port of log4j ● A lot of configuration ● The old one - avoid
  • 9. log4net, NLog, Serilog NLog ● Made for .NET ● Better api ● Less configuration ● Still in very good shape.
  • 10. log4net, NLog, Serilog Serilog ● Introduced structured logging ● Even lesser configuration ● Even simpler API ● The new one. Best of three. NLog with sugar on top. Adopt it.
  • 11. log4net, NLog, Serilog Microsoft.Extensions.Logging ● Introduced with .NET Core ● Both abstraction and implementation ● Common practise is to use abstractions of it with NLog or Serilog behind
  • 12. log4net, NLog, Serilog - Log Levels log4net NLog Serilog .NET Core Logging Fatal Fatal Fatal Critical Error Error Error Error Warn Warn Warning Warning Info Info Information Information Debug Debug Debug Debug - Trace Verbose Trace Whichever you are gonna use, use them with abstractions introduced with .NET Core Logging.
  • 13. log4net, NLog, Serilog log4net: Appender NLog: Target Serilog: Sink
  • 15. Install > Install-Package Serilog > Install-Package Serilog.Sinks.Console For beginning;
  • 16. Setup var logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger(); For beginning;
  • 18. Structured logging var name = "Doruk"; Log.Information("Hello, {Name}!", name ); [21:38:02 INF] Hello, Doruk! Looks like just string.format, isn’t it ? No it isn’t really. We’ll come to that later.
  • 19. Global Logger Log.Logger = new LoggerConfiguration() .WriteTo.Console().CreateLogger(); Log.Information("Hi from global logger"); A static logger to use from anywhere
  • 20. Output formatting var logger = new LoggerConfiguration() .WriteTo.File("log.txt", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"). CreateLogger(); Timestamp here is an Enricher. More on to that later u3 here means first three characters, uppercase
  • 21. Global Log Level & Overrides Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Fatal) CreateLogger();
  • 22. Dynamic Level Switch var levelSwitch = new LoggingLevelSwitch(); levelSwitch.MinimumLevel = LogEventLevel.Warning; var log = new LoggerConfiguration() .MinimumLevel.ControlledBy(levelSwitch) .WriteTo.ColoredConsole() .CreateLogger();
  • 23. Enrichers - 1 - Code .WriteTo.File("log.txt", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] Version:{Version} {Message:lj}{NewLine}{Exception}") .Enrich.WithProperty("Version", "1.0.0")
  • 24. Enrichers - 2 - Output 2020-06-02 22:00:47.826 +03:00 [INF] Version:1.0.0 Hello, Doruk!
  • 25. Filters Log.Logger = new LoggerConfiguration() .WriteTo.Console() .Filter .ByExcluding(Matching.WithProperty<int>("Count", p => p < 10)) .CreateLogger();
  • 26. Some Sinks ● Amazon Cloudwatch ● Amazon Dynamodb ● Amazon S3 ● Application Insights ● Azure Analytics ● Couchdb ● log4net ● Mongodb ● New Relic ● NLog ● Rabbitmq ● Slack ● Seq ● Telegram ● MSSQL ● MySQL ● LiteDB
  • 28. What is structured logging A better way to capture and render log messages for machine and human use.[4] In structured logging logs are saved in raw json format that contains your message format and data.
  • 29. Unstructured logging //code log("User %s logged in from %s", username, ipAddress); //output 2016-05-27T13:02:11.888 User alice logged in from 123.45.67.89 Lets leave it behind.
  • 30. Structured Logging log("User {username} logged in from {ip_address}", username, ipAddress) Same logging code
  • 31. Structured Logging 2016-05-27T13:02:11.888 User alice logged in from 123.45.67.89 Same message, but rendered
  • 32. Structured Logging { "time": "2016-05-27T13:02:11.888", "template": "User {username} logged in from {ip_address}", "username": "alice", "ip_address": "123.45.67.89" } Aaaaand the way we store it
  • 33. Seq
  • 34. Seq - what is it Seq is a platform that has in it; ● Log store ● Visualizer ● Rest api for directly logging to it
  • 35. Seq - what is it Seq is built for modern structured logging with message templates. Rather than waste time and effort trying to extract data from plain-text logs with fragile log parsing, the properties associated with each log event are captured and sent to Seq in a clean JSON format. Message templates are supported natively by ASP.NET Core, Serilog, NLog, and many other libraries, so your application can use the best available diagnostic logging for your platform.
  • 36. Seq - what is it ● It’s a log server. Store your logs in it. ● Use it’s ui to filter logs ● Create charts, analyze ● Integrate it to slack or equivalent for alerts
  • 38. Serilog & Seq doing structured logging public class AccountInformation { public string Owner { get; set; } public decimal Balance { get; set; } public Dictionary<DateTime, decimal> Transactions { get; set; } } Assume we have this class
  • 39. Serilog & Seq doing structured logging var info = new AccountInformation() { Balance = 1000, Owner = "Doruk", Transactions = new System.Collections.Generic.Dictionary<DateTime, decimal>() { [DateTime.Now] = 100, [DateTime.Now.AddDays(-1)] = 200 } }; Log.Information("New Account Added {@account}", info); And we log it to Seq through Serilog this way
  • 40. Serilog & Seq doing structured logging This is what we get at Seq UI
  • 41. Serilog & Seq doing structured logging { "@t": "2020-06-03T17:50:29.6174552+03:00", "@mt": "New Account Added {@info}", "@m": "New Account Added {rn "Owner": "Doruk",rn "Balance": 1068,rn "Transactio", "@i": "7990e46d", "info": { "Owner": "Doruk", "Balance": 1068, "Transactions": { "3.06.2020 17:50:29": 78, "2.06.2020 17:50:29": 89 }, "_typeTag": "AccountInformation" } } Stored json. m is message, mt is template.
  • 42. Serilog & Seq doing structured logging Navigate easily with SQL like language
  • 44. My humble conclusion is ● NLog is still great but Serilog is easier to use and has more to offer. ● Structured logging is a lifesaver if we write lots of logs that has data fused with them. ● Platforms like Seq helps a lot while dealing with logs.
  • 45. References ● [1] https://michaelscodingspot.com/dotnet-debugging-tools/ ● [2] .NET Web Application Logging Essentials by Thomas Ardal ● [3]https://github.com/serilog/serilog/wiki ● [4]https://messagetemplates.org/ Thanks a lot. Doruk Uluçay