From 0fa0070d41c0bed76cb88f00e7c8c046bf73c2b6 Mon Sep 17 00:00:00 2001 From: alyssa Date: Sun, 18 May 2025 13:14:29 +0000 Subject: [PATCH] feat(dotnet): json stdout logging --- .gitmodules | 4 + PluralKit.API/PluralKit.API.csproj | 2 +- PluralKit.API/Startup.cs | 2 +- PluralKit.API/packages.lock.json | 105 ++++----- PluralKit.Bot/Init.cs | 2 +- PluralKit.Bot/packages.lock.json | 12 +- PluralKit.Core/Modules/LoggingModule.cs | 22 +- PluralKit.Core/PluralKit.Core.csproj | 7 +- PluralKit.Core/Utils/SerilogJsonFormatter.cs | 215 +++++++++++++++++++ PluralKit.Core/packages.lock.json | 19 +- PluralKit.Tests/packages.lock.json | 97 +++++---- Serilog | 1 + 12 files changed, 348 insertions(+), 140 deletions(-) create mode 100644 PluralKit.Core/Utils/SerilogJsonFormatter.cs create mode 160000 Serilog diff --git a/.gitmodules b/.gitmodules index e69de29b..96fb8310 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "Serilog"] + path = Serilog + url = https://github.com/pluralkit/serilog + branch = f5eb991cb4c4a0c1e2407de7504c543536786598 diff --git a/PluralKit.API/PluralKit.API.csproj b/PluralKit.API/PluralKit.API.csproj index e35518dd..b1d88098 100644 --- a/PluralKit.API/PluralKit.API.csproj +++ b/PluralKit.API/PluralKit.API.csproj @@ -32,6 +32,6 @@ - + diff --git a/PluralKit.API/Startup.cs b/PluralKit.API/Startup.cs index ecb91710..06af238a 100644 --- a/PluralKit.API/Startup.cs +++ b/PluralKit.API/Startup.cs @@ -35,7 +35,7 @@ public class Startup builder.RegisterInstance(InitUtils.BuildConfiguration(Environment.GetCommandLineArgs()).Build()) .As(); builder.RegisterModule(new ConfigModule("API")); - builder.RegisterModule(new LoggingModule("api", + builder.RegisterModule(new LoggingModule("dotnet-api", cfg: new LoggerConfiguration().Filter.ByExcluding( exc => exc.Exception is PKError || exc.Exception.IsUserError() ))); diff --git a/PluralKit.API/packages.lock.json b/PluralKit.API/packages.lock.json index adc4279b..0107414c 100644 --- a/PluralKit.API/packages.lock.json +++ b/PluralKit.API/packages.lock.json @@ -36,17 +36,20 @@ }, "Serilog.AspNetCore": { "type": "Direct", - "requested": "[9.0.0, )", - "resolved": "9.0.0", - "contentHash": "JslDajPlBsn3Pww1554flJFTqROvK9zz9jONNQgn0D8Lx2Trw8L0A8/n6zEQK1DAZWXrJwiVLw8cnTR3YFuYsg==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "FAjtKPZ4IzqFQBqZKPv6evcXK/F0ls7RoXI/62Pnx2igkDZ6nZ/jn/C/FxVATqQbEQvtqP+KViWYIe4NZIHa2w==", "dependencies": { - "Serilog": "4.2.0", - "Serilog.Extensions.Hosting": "9.0.0", - "Serilog.Formatting.Compact": "3.0.0", - "Serilog.Settings.Configuration": "9.0.0", - "Serilog.Sinks.Console": "6.0.0", - "Serilog.Sinks.Debug": "3.0.0", - "Serilog.Sinks.File": "6.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1", + "Serilog.Extensions.Hosting": "8.0.0", + "Serilog.Extensions.Logging": "8.0.0", + "Serilog.Formatting.Compact": "2.0.0", + "Serilog.Settings.Configuration": "8.0.0", + "Serilog.Sinks.Console": "5.0.0", + "Serilog.Sinks.Debug": "2.0.0", + "Serilog.Sinks.File": "5.0.0" } }, "App.Metrics": { @@ -296,21 +299,21 @@ }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "resolved": "8.0.0", + "contentHash": "NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==", "dependencies": { - "System.Text.Encodings.Web": "9.0.0", - "System.Text.Json": "9.0.0" + "System.Text.Encodings.Web": "8.0.0", + "System.Text.Json": "8.0.0" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "1K8P7XzuzX8W8pmXcZjcrqS6x5eSSdvhQohmcpgiQNY/HlDAlnrhR9dvlURfFz428A+RTCJpUyB+aKTA6AgVcQ==", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Options": "9.0.0", - "System.Diagnostics.DiagnosticSource": "9.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" } }, "Microsoft.Extensions.FileProviders.Abstractions": { @@ -338,14 +341,14 @@ }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "yUKJgu81ExjvqbNWqZKshBbLntZMbMVz/P7Way2SBx7bMqA08Mfdc9O7hWDKAiSp+zPUGT6LKcSCQIPeDK+CCw==", + "resolved": "8.0.0", + "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.0", - "Microsoft.Extensions.Logging.Abstractions": "9.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Logging": { @@ -461,30 +464,25 @@ "System.IO.Pipelines": "5.0.1" } }, - "Serilog": { - "type": "Transitive", - "resolved": "4.2.0", - "contentHash": "gmoWVOvKgbME8TYR+gwMf7osROiWAURterc6Rt2dQyX7wtjZYpqFiA/pY6ztjGQKKV62GGCyOcmtP1UKMHgSmA==" - }, "Serilog.Extensions.Hosting": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "u2TRxuxbjvTAldQn7uaAwePkWxTHIqlgjelekBtilAGL5sYyF3+65NWctN4UrwwGLsDC7c3Vz3HnOlu+PcoxXg==", + "resolved": "8.0.0", + "contentHash": "db0OcbWeSCvYQkHWu6n0v40N4kKaTAXNjlM3BKvcbwvNzYphQFcBR+36eQ/7hMMwOkJvAyLC2a9/jNdUL5NjtQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "9.0.0", - "Microsoft.Extensions.Logging.Abstractions": "9.0.0", - "Serilog": "4.2.0", - "Serilog.Extensions.Logging": "9.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Serilog": "3.1.1", + "Serilog.Extensions.Logging": "8.0.0" } }, "Serilog.Extensions.Logging": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "NwSSYqPJeKNzl5AuXVHpGbr6PkZJFlNa14CdIebVjK3k/76kYj/mz5kiTRNVSsSaxM8kAIa1kpy/qyT9E4npRQ==", + "resolved": "8.0.0", + "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", "dependencies": { - "Microsoft.Extensions.Logging": "9.0.0", - "Serilog": "4.2.0" + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" } }, "Serilog.Formatting.Compact": { @@ -514,12 +512,12 @@ }, "Serilog.Settings.Configuration": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "4/Et4Cqwa+F88l5SeFeNZ4c4Z6dEAIKbu3MaQb2Zz9F/g27T5a3wvfMcmCOaAiACjfUb4A6wrlTVfyYUZk3RRQ==", + "resolved": "8.0.0", + "contentHash": "nR0iL5HwKj5v6ULo3/zpP8NMcq9E2pxYA6XKTSWCbugVs4YqPyvaqaKOY+OMpPivKp7zMEpax2UKHnDodbRB0Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "9.0.0", - "Microsoft.Extensions.DependencyModel": "9.0.0", - "Serilog": "4.2.0" + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyModel": "8.0.0", + "Serilog": "3.1.1" } }, "Serilog.Sinks.Async": { @@ -540,10 +538,10 @@ }, "Serilog.Sinks.Debug": { "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "4BzXcdrgRX7wde9PmHuYd9U6YqycCC28hhpKonK7hx0wb19eiuRj16fPcPSVp0o/Y1ipJuNLYQ00R3q2Zs8FDA==", + "resolved": "2.0.0", + "contentHash": "Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==", "dependencies": { - "Serilog": "4.0.0" + "Serilog": "2.10.0" } }, "Serilog.Sinks.Elasticsearch": { @@ -837,8 +835,8 @@ "NodaTime.Serialization.JsonNet": "[3.1.0, )", "Npgsql": "[9.0.2, )", "Npgsql.NodaTime": "[9.0.2, )", - "Serilog": "[4.2.0, )", - "Serilog.Extensions.Logging": "[9.0.0, )", + "Serilog": "[4.1.0, )", + "Serilog.Extensions.Logging": "[8.0.0, )", "Serilog.Formatting.Compact": "[3.0.0, )", "Serilog.NodaTime": "[3.0.0, )", "Serilog.Sinks.Async": "[2.1.0, )", @@ -852,6 +850,9 @@ "System.Interactive.Async": "[6.0.1, )", "ipnetwork2": "[3.0.667, )" } + }, + "serilog": { + "type": "Project" } } } diff --git a/PluralKit.Bot/Init.cs b/PluralKit.Bot/Init.cs index c3046aa9..bf48d6c4 100644 --- a/PluralKit.Bot/Init.cs +++ b/PluralKit.Bot/Init.cs @@ -158,7 +158,7 @@ public class Init var builder = new ContainerBuilder(); builder.RegisterInstance(config); builder.RegisterModule(new ConfigModule("Bot")); - builder.RegisterModule(new LoggingModule("bot")); + builder.RegisterModule(new LoggingModule("dotnet-bot")); builder.RegisterModule(new MetricsModule()); builder.RegisterModule(); builder.RegisterModule(); diff --git a/PluralKit.Bot/packages.lock.json b/PluralKit.Bot/packages.lock.json index 79da3d52..3d718fc6 100644 --- a/PluralKit.Bot/packages.lock.json +++ b/PluralKit.Bot/packages.lock.json @@ -423,11 +423,11 @@ }, "Serilog.Extensions.Logging": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "NwSSYqPJeKNzl5AuXVHpGbr6PkZJFlNa14CdIebVjK3k/76kYj/mz5kiTRNVSsSaxM8kAIa1kpy/qyT9E4npRQ==", + "resolved": "8.0.0", + "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", "dependencies": { - "Microsoft.Extensions.Logging": "9.0.0", - "Serilog": "4.2.0" + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" } }, "Serilog.Formatting.Compact": { @@ -796,8 +796,8 @@ "NodaTime.Serialization.JsonNet": "[3.1.0, )", "Npgsql": "[9.0.2, )", "Npgsql.NodaTime": "[9.0.2, )", - "Serilog": "[4.2.0, )", - "Serilog.Extensions.Logging": "[9.0.0, )", + "Serilog": "[4.1.0, )", + "Serilog.Extensions.Logging": "[8.0.0, )", "Serilog.Formatting.Compact": "[3.0.0, )", "Serilog.NodaTime": "[3.0.0, )", "Serilog.Sinks.Async": "[2.1.0, )", diff --git a/PluralKit.Core/Modules/LoggingModule.cs b/PluralKit.Core/Modules/LoggingModule.cs index f02bfe69..4be07b50 100644 --- a/PluralKit.Core/Modules/LoggingModule.cs +++ b/PluralKit.Core/Modules/LoggingModule.cs @@ -10,8 +10,7 @@ using NodaTime; using Serilog; using Serilog.Events; -using Serilog.Formatting.Compact; -using Serilog.Sinks.Seq; +using Serilog.Formatting.Json; using Serilog.Sinks.SystemConsole.Themes; using ILogger = Serilog.ILogger; @@ -50,14 +49,9 @@ public class LoggingModule: Module private ILogger InitLogger(CoreConfig config) { - var consoleTemplate = "[{Timestamp:HH:mm:ss.fff}] {Level:u3} {Message:lj}{NewLine}{Exception}"; - var outputTemplate = "[{Timestamp:yyyy-MM-dd HH:mm:ss.ffffff}] {Level:u3} {Message:lj}{NewLine}{Exception}"; - var logCfg = _cfg .Enrich.FromLogContext() - .Enrich.WithProperty("GitCommitHash", BuildInfoService.FullVersion) .ConfigureForNodaTime(DateTimeZoneProviders.Tzdb) - .Enrich.WithProperty("Component", _component) .MinimumLevel.Is(config.ConsoleLogLevel) // Don't want App.Metrics/D#+ spam @@ -75,9 +69,8 @@ public class LoggingModule: Module .Destructure.With() .WriteTo.Async(a => a.Console( - theme: AnsiConsoleTheme.Code, - outputTemplate: consoleTemplate, - restrictedToMinimumLevel: config.ConsoleLogLevel)); + new CustomJsonFormatter(_component), + config.ConsoleLogLevel)); if (config.ElasticUrl != null) { @@ -89,15 +82,6 @@ public class LoggingModule: Module ); } - if (config.SeqLogUrl != null) - { - logCfg.WriteTo.Seq( - config.SeqLogUrl, - restrictedToMinimumLevel: LogEventLevel.Verbose - ); - } - - _fn.Invoke(logCfg); return Log.Logger = logCfg.CreateLogger(); } diff --git a/PluralKit.Core/PluralKit.Core.csproj b/PluralKit.Core/PluralKit.Core.csproj index e4312988..a13bcefb 100644 --- a/PluralKit.Core/PluralKit.Core.csproj +++ b/PluralKit.Core/PluralKit.Core.csproj @@ -15,6 +15,10 @@ true + + + + @@ -37,8 +41,7 @@ - - + diff --git a/PluralKit.Core/Utils/SerilogJsonFormatter.cs b/PluralKit.Core/Utils/SerilogJsonFormatter.cs new file mode 100644 index 00000000..8bcc5731 --- /dev/null +++ b/PluralKit.Core/Utils/SerilogJsonFormatter.cs @@ -0,0 +1,215 @@ +using System.Runtime.CompilerServices; + +using Serilog.Events; +using Serilog.Formatting; +using Serilog.Formatting.Json; +using Serilog.Parsing; +using Serilog.Rendering; + +// Customized Serilog JSON output for PluralKit + +// Copyright 2013-2015 Serilog Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace PluralKit.Core; + +static class Guard +{ + public static T AgainstNull( + T? argument, + [CallerArgumentExpression("argument")] string? paramName = null) + where T : class + { + if (argument is null) + { + throw new ArgumentNullException(paramName); + } + + return argument; + } +} + +/// +/// Formats log events in a simple JSON structure. Instances of this class +/// are safe for concurrent access by multiple threads. +/// +/// New code should prefer formatters from Serilog.Formatting.Compact, or ExpressionTemplate from +/// Serilog.Expressions. +public sealed class CustomJsonFormatter: ITextFormatter +{ + readonly JsonValueFormatter _jsonValueFormatter = new(); + readonly string _component; + + /// + /// Construct a . + /// + /// A string that will be written after each log event is formatted. + /// If null, will be used. + /// If , the message will be rendered and written to the output as a + /// property named RenderedMessage. + /// Supplies culture-specific formatting information, or null. + public CustomJsonFormatter(string component) + { + _component = component; + } + + private string CustomLevelString(LogEventLevel level) + { + switch (level) + { + case LogEventLevel.Verbose: + return "TRACE"; + case LogEventLevel.Debug: + return "DEBUG"; + case LogEventLevel.Information: + return "INFO"; + case LogEventLevel.Warning: + return "WARN"; + case LogEventLevel.Error: + return "ERROR"; + case LogEventLevel.Fatal: + return "FATAL"; + }; + + return "UNKNOWN"; + } + + /// + /// Format the log event into the output. + /// + /// The event to format. + /// The output. + /// When is null + /// When is null + public void Format(LogEvent logEvent, TextWriter output) + { + Guard.AgainstNull(logEvent); + Guard.AgainstNull(output); + + output.Write("{\"component\":\""); + output.Write(_component); + output.Write("\",\"timestamp\":\""); + output.Write(logEvent.Timestamp.ToString("O").Replace("+00:00", "Z")); + output.Write("\",\"level\":\""); + output.Write(CustomLevelString(logEvent.Level)); + + output.Write("\",\"message\":"); + var message = logEvent.MessageTemplate.Render(logEvent.Properties); + JsonValueFormatter.WriteQuotedJsonString(message, output); + + if (logEvent.TraceId != null) + { + output.Write(",\"TraceId\":"); + JsonValueFormatter.WriteQuotedJsonString(logEvent.TraceId.ToString()!, output); + } + + if (logEvent.SpanId != null) + { + output.Write(",\"SpanId\":"); + JsonValueFormatter.WriteQuotedJsonString(logEvent.SpanId.ToString()!, output); + } + + if (logEvent.Exception != null) + { + output.Write(",\"Exception\":"); + JsonValueFormatter.WriteQuotedJsonString(logEvent.Exception.ToString(), output); + } + + if (logEvent.Properties.Count != 0) + { + output.Write(",\"Properties\":{"); + + char? propertyDelimiter = null; + foreach (var property in logEvent.Properties) + { + if (propertyDelimiter != null) + output.Write(propertyDelimiter.Value); + else + propertyDelimiter = ','; + + JsonValueFormatter.WriteQuotedJsonString(property.Key, output); + output.Write(':'); + _jsonValueFormatter.Format(property.Value, output); + } + + output.Write('}'); + } + + var tokensWithFormat = logEvent.MessageTemplate.Tokens + .OfType() + .Where(pt => pt.Format != null) + .GroupBy(pt => pt.PropertyName) + .ToArray(); + + if (tokensWithFormat.Length != 0) + { + output.Write(",\"Renderings\":{"); + WriteRenderingsValues(tokensWithFormat, logEvent.Properties, output); + output.Write('}'); + } + + output.Write('}'); + output.Write("\n"); + } + + void WriteRenderingsValues(IEnumerable> tokensWithFormat, IReadOnlyDictionary properties, TextWriter output) + { + static void WriteNameValuePair(string name, string value, ref char? precedingDelimiter, TextWriter output) + { + if (precedingDelimiter != null) + output.Write(precedingDelimiter.Value); + + JsonValueFormatter.WriteQuotedJsonString(name, output); + output.Write(':'); + JsonValueFormatter.WriteQuotedJsonString(value, output); + precedingDelimiter = ','; + } + + char? propertyDelimiter = null; + foreach (var propertyFormats in tokensWithFormat) + { + if (propertyDelimiter != null) + output.Write(propertyDelimiter.Value); + else + propertyDelimiter = ','; + + output.Write('"'); + output.Write(propertyFormats.Key); + output.Write("\":["); + + char? formatDelimiter = null; + foreach (var format in propertyFormats) + { + if (formatDelimiter != null) + output.Write(formatDelimiter.Value); + + formatDelimiter = ','; + + output.Write('{'); + char? elementDelimiter = null; + + // Caller ensures that `tokensWithFormat` contains only property tokens that have non-null `Format`s. + WriteNameValuePair("Format", format.Format!, ref elementDelimiter, output); + + using var sw = ReusableStringWriter.GetOrCreate(); + MessageTemplateRenderer.RenderPropertyToken(format, properties, sw, null, isLiteral: true, isJson: false); + WriteNameValuePair("Rendering", sw.ToString(), ref elementDelimiter, output); + + output.Write('}'); + } + + output.Write(']'); + } + } +} \ No newline at end of file diff --git a/PluralKit.Core/packages.lock.json b/PluralKit.Core/packages.lock.json index a4768566..4f9ec5d0 100644 --- a/PluralKit.Core/packages.lock.json +++ b/PluralKit.Core/packages.lock.json @@ -198,20 +198,14 @@ "Npgsql": "9.0.2" } }, - "Serilog": { - "type": "Direct", - "requested": "[4.2.0, )", - "resolved": "4.2.0", - "contentHash": "gmoWVOvKgbME8TYR+gwMf7osROiWAURterc6Rt2dQyX7wtjZYpqFiA/pY6ztjGQKKV62GGCyOcmtP1UKMHgSmA==" - }, "Serilog.Extensions.Logging": { "type": "Direct", - "requested": "[9.0.0, )", - "resolved": "9.0.0", - "contentHash": "NwSSYqPJeKNzl5AuXVHpGbr6PkZJFlNa14CdIebVjK3k/76kYj/mz5kiTRNVSsSaxM8kAIa1kpy/qyT9E4npRQ==", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", "dependencies": { - "Microsoft.Extensions.Logging": "9.0.0", - "Serilog": "4.2.0" + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" } }, "Serilog.Formatting.Compact": { @@ -722,6 +716,9 @@ "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } + }, + "serilog": { + "type": "Project" } } } diff --git a/PluralKit.Tests/packages.lock.json b/PluralKit.Tests/packages.lock.json index b9e49ba9..79926c2a 100644 --- a/PluralKit.Tests/packages.lock.json +++ b/PluralKit.Tests/packages.lock.json @@ -320,21 +320,21 @@ }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==", + "resolved": "8.0.0", + "contentHash": "NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==", "dependencies": { - "System.Text.Encodings.Web": "9.0.0", - "System.Text.Json": "9.0.0" + "System.Text.Encodings.Web": "8.0.0", + "System.Text.Json": "8.0.0" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "1K8P7XzuzX8W8pmXcZjcrqS6x5eSSdvhQohmcpgiQNY/HlDAlnrhR9dvlURfFz428A+RTCJpUyB+aKTA6AgVcQ==", + "resolved": "8.0.0", + "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Options": "9.0.0", - "System.Diagnostics.DiagnosticSource": "9.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "System.Diagnostics.DiagnosticSource": "8.0.0" } }, "Microsoft.Extensions.FileProviders.Abstractions": { @@ -362,14 +362,14 @@ }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "yUKJgu81ExjvqbNWqZKshBbLntZMbMVz/P7Way2SBx7bMqA08Mfdc9O7hWDKAiSp+zPUGT6LKcSCQIPeDK+CCw==", + "resolved": "8.0.0", + "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.0", - "Microsoft.Extensions.Logging.Abstractions": "9.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0" } }, "Microsoft.Extensions.Logging": { @@ -537,37 +537,40 @@ }, "Serilog.AspNetCore": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "JslDajPlBsn3Pww1554flJFTqROvK9zz9jONNQgn0D8Lx2Trw8L0A8/n6zEQK1DAZWXrJwiVLw8cnTR3YFuYsg==", + "resolved": "8.0.0", + "contentHash": "FAjtKPZ4IzqFQBqZKPv6evcXK/F0ls7RoXI/62Pnx2igkDZ6nZ/jn/C/FxVATqQbEQvtqP+KViWYIe4NZIHa2w==", "dependencies": { - "Serilog": "4.2.0", - "Serilog.Extensions.Hosting": "9.0.0", - "Serilog.Formatting.Compact": "3.0.0", - "Serilog.Settings.Configuration": "9.0.0", - "Serilog.Sinks.Console": "6.0.0", - "Serilog.Sinks.Debug": "3.0.0", - "Serilog.Sinks.File": "6.0.0" + "Microsoft.Extensions.DependencyInjection": "8.0.0", + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1", + "Serilog.Extensions.Hosting": "8.0.0", + "Serilog.Extensions.Logging": "8.0.0", + "Serilog.Formatting.Compact": "2.0.0", + "Serilog.Settings.Configuration": "8.0.0", + "Serilog.Sinks.Console": "5.0.0", + "Serilog.Sinks.Debug": "2.0.0", + "Serilog.Sinks.File": "5.0.0" } }, "Serilog.Extensions.Hosting": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "u2TRxuxbjvTAldQn7uaAwePkWxTHIqlgjelekBtilAGL5sYyF3+65NWctN4UrwwGLsDC7c3Vz3HnOlu+PcoxXg==", + "resolved": "8.0.0", + "contentHash": "db0OcbWeSCvYQkHWu6n0v40N4kKaTAXNjlM3BKvcbwvNzYphQFcBR+36eQ/7hMMwOkJvAyLC2a9/jNdUL5NjtQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "9.0.0", - "Microsoft.Extensions.Logging.Abstractions": "9.0.0", - "Serilog": "4.2.0", - "Serilog.Extensions.Logging": "9.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Serilog": "3.1.1", + "Serilog.Extensions.Logging": "8.0.0" } }, "Serilog.Extensions.Logging": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "NwSSYqPJeKNzl5AuXVHpGbr6PkZJFlNa14CdIebVjK3k/76kYj/mz5kiTRNVSsSaxM8kAIa1kpy/qyT9E4npRQ==", + "resolved": "8.0.0", + "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", "dependencies": { - "Microsoft.Extensions.Logging": "9.0.0", - "Serilog": "4.2.0" + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" } }, "Serilog.Formatting.Compact": { @@ -597,12 +600,12 @@ }, "Serilog.Settings.Configuration": { "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "4/Et4Cqwa+F88l5SeFeNZ4c4Z6dEAIKbu3MaQb2Zz9F/g27T5a3wvfMcmCOaAiACjfUb4A6wrlTVfyYUZk3RRQ==", + "resolved": "8.0.0", + "contentHash": "nR0iL5HwKj5v6ULo3/zpP8NMcq9E2pxYA6XKTSWCbugVs4YqPyvaqaKOY+OMpPivKp7zMEpax2UKHnDodbRB0Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Binder": "9.0.0", - "Microsoft.Extensions.DependencyModel": "9.0.0", - "Serilog": "4.2.0" + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyModel": "8.0.0", + "Serilog": "3.1.1" } }, "Serilog.Sinks.Async": { @@ -623,10 +626,10 @@ }, "Serilog.Sinks.Debug": { "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "4BzXcdrgRX7wde9PmHuYd9U6YqycCC28hhpKonK7hx0wb19eiuRj16fPcPSVp0o/Y1ipJuNLYQ00R3q2Zs8FDA==", + "resolved": "2.0.0", + "contentHash": "Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==", "dependencies": { - "Serilog": "4.0.0" + "Serilog": "2.10.0" } }, "Serilog.Sinks.Elasticsearch": { @@ -993,7 +996,7 @@ "Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer": "[5.1.0, )", "PluralKit.Core": "[1.0.0, )", "Sentry": "[4.13.0, )", - "Serilog.AspNetCore": "[9.0.0, )" + "Serilog.AspNetCore": "[8.0.0, )" } }, "pluralkit.bot": { @@ -1029,8 +1032,8 @@ "NodaTime.Serialization.JsonNet": "[3.1.0, )", "Npgsql": "[9.0.2, )", "Npgsql.NodaTime": "[9.0.2, )", - "Serilog": "[4.2.0, )", - "Serilog.Extensions.Logging": "[9.0.0, )", + "Serilog": "[4.1.0, )", + "Serilog.Extensions.Logging": "[8.0.0, )", "Serilog.Formatting.Compact": "[3.0.0, )", "Serilog.NodaTime": "[3.0.0, )", "Serilog.Sinks.Async": "[2.1.0, )", diff --git a/Serilog b/Serilog new file mode 160000 index 00000000..f5eb991c --- /dev/null +++ b/Serilog @@ -0,0 +1 @@ +Subproject commit f5eb991cb4c4a0c1e2407de7504c543536786598