From f46de3aa4195122c2890906e77974336c5edd5be Mon Sep 17 00:00:00 2001 From: Duke <40759437+dukesteen@users.noreply.github.com> Date: Thu, 24 Feb 2022 21:52:17 +0100 Subject: [PATCH] Add serilog guide --- .../other_libs/images/serilog_output.png | Bin 0 -> 40492 bytes docs/guides/other_libs/serilog.md | 96 ++++++++++++++++++ docs/guides/toc.yml | 6 +- 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 docs/guides/other_libs/images/serilog_output.png create mode 100644 docs/guides/other_libs/serilog.md diff --git a/docs/guides/other_libs/images/serilog_output.png b/docs/guides/other_libs/images/serilog_output.png new file mode 100644 index 0000000000000000000000000000000000000000..67de0fa34627a4854bb9107d6367d4074c2aa844 GIT binary patch literal 40492 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 literal 0 HcmV?d00001 diff --git a/docs/guides/other_libs/serilog.md b/docs/guides/other_libs/serilog.md new file mode 100644 index 000000000..6de0fce25 --- /dev/null +++ b/docs/guides/other_libs/serilog.md @@ -0,0 +1,96 @@ +--- +uid: Guides.OtherLibs.Serilog +title: Configuring Serilog +--- + +# Configuring serilog + +## Prerequisites + +- A basic working bot with a logging method as described in [Creating your first bot]: xref:Guides.GettingStarted.FirstBot#creating-a-discord-client + +## Installing the Serilog package + +You can install the following packages through your IDE or go to the nuget link to grab the dotnet cli command. + +|Name|Link| +|--|--| +|`Serilog.Extensions.Logging`| [link](https://www.nuget.org/packages/Serilog.Extensions.Logging)| +|`Serilog.Sinks.Console`| [link](https://www.nuget.org/packages/Serilog.Sinks.Console)| + +## Configuring Serilog + +Serilog will be configured at the top of your async Main method, it looks like this + +```cs +public class Program +{ + public static Task Main(string[] args) => new Program().MainAsync(); + + public async Task MainAsync() + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Verbose() + .Enrich.FromLogContext() + .WriteTo.Console() + .CreateLogger(); + + _client = new DiscordSocketClient(); + + _client.Log += LogAsync; + + // You can assign your bot token to a string, and pass that in to connect. + // This is, however, insecure, particularly if you plan to have your code hosted in a public repository. + var token = "token"; + + // Some alternative options would be to keep your token in an Environment Variable or a standalone file. + // var token = Environment.GetEnvironmentVariable("NameOfYourEnvironmentVariable"); + // var token = File.ReadAllText("token.txt"); + // var token = JsonConvert.DeserializeObject(File.ReadAllText("config.json")).Token; + + await _client.LoginAsync(TokenType.Bot, token); + await _client.StartAsync(); + + // Block this task until the program is closed. + await Task.Delay(-1); +} +} +``` + +## Modifying your logging method + +For serilog to log discord events correctly, we have to map the discord `LogSeverity` to the serilog `LogEventLevel`. You can modify your log method to look like this. + +```cs +private static Task LogAsync(LogMessage message) +{ + var severity = message.Severity switch + { + LogSeverity.Critical => LogEventLevel.Fatal, + LogSeverity.Error => LogEventLevel.Error, + LogSeverity.Warning => LogEventLevel.Warning, + LogSeverity.Info => LogEventLevel.Information, + LogSeverity.Verbose => LogEventLevel.Verbose, + LogSeverity.Debug => LogEventLevel.Debug, + _ => LogEventLevel.Information + }; + Log.Write(severity, message.Exception, "[{Source}] {Message}", message.Source, message.Message); + return Task.CompletedTask; +} +``` + +## Testing + +If you run your application now, you should see something similar to this +![Serilog output](images/serilog_output.png) + +## Using your new logger in other places + +Now that you have set up Serilog, you can use it everywhere in your application by simply calling + +```cs +Log.Debug("Your log message, with {Variables}!", 10) // This will output "[21:51:00 DBG] Your log message, with 10!" +``` + +> [!NOTE] +> Depending on your configured log level, the log messages may or may not show up in your console. Refer to [Serilog's github page](https://github.com/serilog/serilog/wiki/Configuration-Basics#minimum-level) for more information about log levels. diff --git a/docs/guides/toc.yml b/docs/guides/toc.yml index 1616363b7..aa653e25a 100644 --- a/docs/guides/toc.yml +++ b/docs/guides/toc.yml @@ -95,7 +95,7 @@ topicUid: Guides.MessageComponents.TextInputs - name: Advanced Concepts topicUid: Guides.MessageComponents.Advanced -- name: Modal Basics +- name: Modal Basics items: - name: Introduction topicUid: Guides.Modals.Intro @@ -109,6 +109,10 @@ topicUid: Guides.GuildEvents.GettingUsers - name: Modifying Events topicUid: Guides.GuildEvents.Modifying +- name: Working with other libraries + items: + - name: Configuring Serilog + topicUid: Guides.OtherLibs.Serilog - name: Emoji topicUid: Guides.Emoji - name: Voice