mirror of
https://github.com/bitwarden/server
synced 2025-12-28 14:13:48 +00:00
Remove deprecated logging methods (#6516)
This commit is contained in:
@@ -50,13 +50,9 @@
|
||||
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="8.0.10" />
|
||||
<PackageReference Include="OneOf" Version="3.0.271" />
|
||||
<PackageReference Include="SendGrid" Version="9.29.3" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.0" />
|
||||
<PackageReference Include="Sentry.Serilog" Version="5.0.0" />
|
||||
<PackageReference Include="Duende.IdentityServer" Version="7.2.4" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Serilog.Sinks.SyslogMessages" Version="4.0.0" />
|
||||
<PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
|
||||
<PackageReference Include="Braintree" Version="5.28.0" />
|
||||
<PackageReference Include="Stripe.net" Version="48.5.0" />
|
||||
|
||||
@@ -2,14 +2,12 @@
|
||||
#nullable disable
|
||||
|
||||
using Bit.Core.Auth.Settings;
|
||||
using Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
namespace Bit.Core.Settings;
|
||||
|
||||
public class GlobalSettings : IGlobalSettings
|
||||
{
|
||||
private string _mailTemplateDirectory;
|
||||
private string _logDirectory;
|
||||
private string _licenseDirectory;
|
||||
|
||||
public GlobalSettings()
|
||||
@@ -25,14 +23,6 @@ public class GlobalSettings : IGlobalSettings
|
||||
public virtual string KnownProxies { get; set; }
|
||||
public virtual string SiteName { get; set; }
|
||||
public virtual string ProjectName { get; set; }
|
||||
public virtual string LogDirectory
|
||||
{
|
||||
get => BuildDirectory(_logDirectory, "/logs");
|
||||
set => _logDirectory = value;
|
||||
}
|
||||
public virtual bool LogDirectoryByProject { get; set; } = true;
|
||||
public virtual long? LogRollBySizeLimit { get; set; }
|
||||
public virtual bool EnableDevLogging { get; set; } = false;
|
||||
public virtual string LicenseDirectory
|
||||
{
|
||||
get => BuildDirectory(_licenseDirectory, "/core/licenses");
|
||||
@@ -73,9 +63,6 @@ public class GlobalSettings : IGlobalSettings
|
||||
public virtual FileStorageSettings Send { get; set; }
|
||||
public virtual IdentityServerSettings IdentityServer { get; set; } = new IdentityServerSettings();
|
||||
public virtual DataProtectionSettings DataProtection { get; set; }
|
||||
public virtual SentrySettings Sentry { get; set; } = new SentrySettings();
|
||||
public virtual SyslogSettings Syslog { get; set; } = new SyslogSettings();
|
||||
public virtual ILogLevelSettings MinLogLevel { get; set; } = new LogLevelSettings();
|
||||
public virtual NotificationHubPoolSettings NotificationHubPool { get; set; } = new();
|
||||
public virtual YubicoSettings Yubico { get; set; } = new YubicoSettings();
|
||||
public virtual DuoSettings Duo { get; set; } = new DuoSettings();
|
||||
@@ -548,59 +535,11 @@ public class GlobalSettings : IGlobalSettings
|
||||
}
|
||||
}
|
||||
|
||||
public class SentrySettings
|
||||
{
|
||||
public string Dsn { get; set; }
|
||||
}
|
||||
|
||||
public class NotificationsSettings : ConnectionStringSettings
|
||||
{
|
||||
public string RedisConnectionString { get; set; }
|
||||
}
|
||||
|
||||
public class SyslogSettings
|
||||
{
|
||||
/// <summary>
|
||||
/// The connection string used to connect to a remote syslog server over TCP or UDP, or to connect locally.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <para>The connection string will be parsed using <see cref="System.Uri" /> to extract the protocol, host name and port number.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// Supported protocols are:
|
||||
/// <list type="bullet">
|
||||
/// <item>UDP (use <code>udp://</code>)</item>
|
||||
/// <item>TCP (use <code>tcp://</code>)</item>
|
||||
/// <item>TLS over TCP (use <code>tls://</code>)</item>
|
||||
/// </list>
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// A remote server (logging.dev.example.com) is listening on UDP (port 514):
|
||||
/// <code>
|
||||
/// udp://logging.dev.example.com:514</code>.
|
||||
/// </example>
|
||||
public string Destination { get; set; }
|
||||
/// <summary>
|
||||
/// The absolute path to a Certificate (DER or Base64 encoded with private key).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The certificate path and <see cref="CertificatePassword"/> are passed into the <see cref="System.Security.Cryptography.X509Certificates.X509Certificate2.X509Certificate2(string, string)" />.
|
||||
/// The file format of the certificate may be binary encoded (DER) or base64. If the private key is encrypted, provide the password in <see cref="CertificatePassword"/>,
|
||||
/// </remarks>
|
||||
public string CertificatePath { get; set; }
|
||||
/// <summary>
|
||||
/// The password for the encrypted private key in the certificate supplied in <see cref="CertificatePath" />.
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public string CertificatePassword { get; set; }
|
||||
/// <summary>
|
||||
/// The thumbprint of the certificate in the X.509 certificate store for personal certificates for the user account running Bitwarden.
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public string CertificateThumbprint { get; set; }
|
||||
}
|
||||
|
||||
public class NotificationHubSettings
|
||||
{
|
||||
private string _connectionString;
|
||||
|
||||
@@ -20,7 +20,6 @@ public interface IGlobalSettings
|
||||
IConnectionStringSettings Storage { get; set; }
|
||||
IBaseServiceUriSettings BaseServiceUri { get; set; }
|
||||
ISsoSettings Sso { get; set; }
|
||||
ILogLevelSettings MinLogLevel { get; set; }
|
||||
IPasswordlessAuthSettings PasswordlessAuth { get; set; }
|
||||
IDomainVerificationSettings DomainVerification { get; set; }
|
||||
ILaunchDarklySettings LaunchDarkly { get; set; }
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings;
|
||||
|
||||
public interface ILogLevelSettings
|
||||
{
|
||||
IBillingLogLevelSettings BillingSettings { get; set; }
|
||||
IApiLogLevelSettings ApiSettings { get; set; }
|
||||
IIdentityLogLevelSettings IdentitySettings { get; set; }
|
||||
IScimLogLevelSettings ScimSettings { get; set; }
|
||||
ISsoLogLevelSettings SsoSettings { get; set; }
|
||||
IAdminLogLevelSettings AdminSettings { get; set; }
|
||||
IEventsLogLevelSettings EventsSettings { get; set; }
|
||||
IEventsProcessorLogLevelSettings EventsProcessorSettings { get; set; }
|
||||
IIconsLogLevelSettings IconsSettings { get; set; }
|
||||
INotificationsLogLevelSettings NotificationsSettings { get; set; }
|
||||
}
|
||||
|
||||
public interface IBillingLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
LogEventLevel Jobs { get; set; }
|
||||
}
|
||||
|
||||
public interface IApiLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
LogEventLevel IdentityToken { get; set; }
|
||||
LogEventLevel IpRateLimit { get; set; }
|
||||
}
|
||||
|
||||
public interface IIdentityLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
LogEventLevel IdentityToken { get; set; }
|
||||
LogEventLevel IpRateLimit { get; set; }
|
||||
}
|
||||
|
||||
public interface IScimLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
}
|
||||
|
||||
public interface ISsoLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
}
|
||||
|
||||
public interface IAdminLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
}
|
||||
|
||||
public interface IEventsLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
LogEventLevel IdentityToken { get; set; }
|
||||
}
|
||||
|
||||
public interface IEventsProcessorLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
}
|
||||
|
||||
public interface IIconsLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
}
|
||||
|
||||
public interface INotificationsLogLevelSettings
|
||||
{
|
||||
LogEventLevel Default { get; set; }
|
||||
LogEventLevel IdentityToken { get; set; }
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class AdminLogLevelSettings : IAdminLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Error;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class ApiLogLevelSettings : IApiLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Error;
|
||||
public LogEventLevel IdentityToken { get; set; } = LogEventLevel.Fatal;
|
||||
public LogEventLevel IpRateLimit { get; set; } = LogEventLevel.Information;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class BillingLogLevelSettings : IBillingLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Warning;
|
||||
public LogEventLevel Jobs { get; set; } = LogEventLevel.Information;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class EventsLogLevelSettings : IEventsLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Error;
|
||||
public LogEventLevel IdentityToken { get; set; } = LogEventLevel.Fatal;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class EventsProcessorLogLevelSettings : IEventsProcessorLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Warning;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class IconsLogLevelSettings : IIconsLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Error;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class IdentityLogLevelSettings : IIdentityLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Error;
|
||||
public LogEventLevel IdentityToken { get; set; } = LogEventLevel.Fatal;
|
||||
public LogEventLevel IpRateLimit { get; set; } = LogEventLevel.Information;
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class LogLevelSettings : ILogLevelSettings
|
||||
{
|
||||
public IBillingLogLevelSettings BillingSettings { get; set; } = new BillingLogLevelSettings();
|
||||
public IApiLogLevelSettings ApiSettings { get; set; } = new ApiLogLevelSettings();
|
||||
public IIdentityLogLevelSettings IdentitySettings { get; set; } = new IdentityLogLevelSettings();
|
||||
public IScimLogLevelSettings ScimSettings { get; set; } = new ScimLogLevelSettings();
|
||||
public ISsoLogLevelSettings SsoSettings { get; set; } = new SsoLogLevelSettings();
|
||||
public IAdminLogLevelSettings AdminSettings { get; set; } = new AdminLogLevelSettings();
|
||||
public IEventsLogLevelSettings EventsSettings { get; set; } = new EventsLogLevelSettings();
|
||||
public IEventsProcessorLogLevelSettings EventsProcessorSettings { get; set; } = new EventsProcessorLogLevelSettings();
|
||||
public IIconsLogLevelSettings IconsSettings { get; set; } = new IconsLogLevelSettings();
|
||||
public INotificationsLogLevelSettings NotificationsSettings { get; set; } = new NotificationsLogLevelSettings();
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class NotificationsLogLevelSettings : INotificationsLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Warning;
|
||||
public LogEventLevel IdentityToken { get; set; } = LogEventLevel.Fatal;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class ScimLogLevelSettings : IScimLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Warning;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
using Serilog.Events;
|
||||
|
||||
namespace Bit.Core.Settings.LoggingSettings;
|
||||
|
||||
public class SsoLogLevelSettings : ISsoLogLevelSettings
|
||||
{
|
||||
public LogEventLevel Default { get; set; } = LogEventLevel.Error;
|
||||
}
|
||||
@@ -1,165 +1,78 @@
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using Bit.Core.Settings;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Serilog;
|
||||
using Serilog.Events;
|
||||
using Serilog.Sinks.Syslog;
|
||||
|
||||
namespace Bit.Core.Utilities;
|
||||
|
||||
public static class LoggerFactoryExtensions
|
||||
{
|
||||
public static void UseSerilog(
|
||||
this IApplicationBuilder appBuilder,
|
||||
IWebHostEnvironment env,
|
||||
IHostApplicationLifetime applicationLifetime,
|
||||
GlobalSettings globalSettings)
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="hostBuilder"></param>
|
||||
/// <returns></returns>
|
||||
public static IHostBuilder AddSerilogFileLogging(this IHostBuilder hostBuilder)
|
||||
{
|
||||
if (env.IsDevelopment() && !globalSettings.EnableDevLogging)
|
||||
return hostBuilder.ConfigureLogging((context, logging) =>
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
applicationLifetime.ApplicationStopped.Register(Log.CloseAndFlush);
|
||||
}
|
||||
|
||||
public static ILoggingBuilder AddSerilog(
|
||||
this ILoggingBuilder builder,
|
||||
WebHostBuilderContext context,
|
||||
Func<LogEvent, IGlobalSettings, bool>? filter = null)
|
||||
{
|
||||
var globalSettings = new GlobalSettings();
|
||||
ConfigurationBinder.Bind(context.Configuration.GetSection("GlobalSettings"), globalSettings);
|
||||
|
||||
if (context.HostingEnvironment.IsDevelopment() && !globalSettings.EnableDevLogging)
|
||||
{
|
||||
return builder;
|
||||
}
|
||||
|
||||
bool inclusionPredicate(LogEvent e)
|
||||
{
|
||||
if (filter == null)
|
||||
if (context.HostingEnvironment.IsDevelopment())
|
||||
{
|
||||
return true;
|
||||
return;
|
||||
}
|
||||
var eventId = e.Properties.TryGetValue("EventId", out var eventIdValue) ? eventIdValue.ToString() : null;
|
||||
if (eventId?.Contains(Constants.BypassFiltersEventId.ToString()) ?? false)
|
||||
|
||||
// If they have begun using the new settings location, use that
|
||||
if (!string.IsNullOrEmpty(context.Configuration["Logging:PathFormat"]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return filter(e, globalSettings);
|
||||
}
|
||||
|
||||
var logSentryWarning = false;
|
||||
var logSyslogWarning = false;
|
||||
|
||||
// Path format is the only required option for file logging, we will use that as
|
||||
// the keystone for if they have configured the new location.
|
||||
var newPathFormat = context.Configuration["Logging:PathFormat"];
|
||||
|
||||
var config = new LoggerConfiguration()
|
||||
.MinimumLevel.Verbose()
|
||||
.Enrich.FromLogContext()
|
||||
.Filter.ByIncludingOnly(inclusionPredicate);
|
||||
|
||||
if (CoreHelpers.SettingHasValue(globalSettings.Sentry.Dsn))
|
||||
{
|
||||
config.WriteTo.Sentry(globalSettings.Sentry.Dsn)
|
||||
.Enrich.FromLogContext()
|
||||
.Enrich.WithProperty("Project", globalSettings.ProjectName);
|
||||
}
|
||||
else if (CoreHelpers.SettingHasValue(globalSettings.Syslog.Destination))
|
||||
{
|
||||
logSyslogWarning = true;
|
||||
// appending sitename to project name to allow easier identification in syslog.
|
||||
var appName = $"{globalSettings.SiteName}-{globalSettings.ProjectName}";
|
||||
if (globalSettings.Syslog.Destination.Equals("local", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
config.WriteTo.LocalSyslog(appName);
|
||||
}
|
||||
else if (Uri.TryCreate(globalSettings.Syslog.Destination, UriKind.Absolute, out var syslogAddress))
|
||||
{
|
||||
// Syslog's standard port is 514 (both UDP and TCP). TLS does not have a standard port, so assume 514.
|
||||
int port = syslogAddress.Port >= 0
|
||||
? syslogAddress.Port
|
||||
: 514;
|
||||
|
||||
if (syslogAddress.Scheme.Equals("udp"))
|
||||
{
|
||||
config.WriteTo.UdpSyslog(syslogAddress.Host, port, appName);
|
||||
}
|
||||
else if (syslogAddress.Scheme.Equals("tcp"))
|
||||
{
|
||||
config.WriteTo.TcpSyslog(syslogAddress.Host, port, appName);
|
||||
}
|
||||
else if (syslogAddress.Scheme.Equals("tls"))
|
||||
{
|
||||
if (CoreHelpers.SettingHasValue(globalSettings.Syslog.CertificateThumbprint))
|
||||
{
|
||||
config.WriteTo.TcpSyslog(syslogAddress.Host, port, appName,
|
||||
useTls: true,
|
||||
certProvider: new CertificateStoreProvider(StoreName.My, StoreLocation.CurrentUser,
|
||||
globalSettings.Syslog.CertificateThumbprint));
|
||||
}
|
||||
else
|
||||
{
|
||||
config.WriteTo.TcpSyslog(syslogAddress.Host, port, appName,
|
||||
useTls: true,
|
||||
certProvider: new CertificateFileProvider(globalSettings.Syslog.CertificatePath,
|
||||
globalSettings.Syslog?.CertificatePassword ?? string.Empty));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(newPathFormat))
|
||||
{
|
||||
// Use new location
|
||||
builder.AddFile(context.Configuration.GetSection("Logging"));
|
||||
}
|
||||
else if (CoreHelpers.SettingHasValue(globalSettings.LogDirectory))
|
||||
{
|
||||
if (globalSettings.LogRollBySizeLimit.HasValue)
|
||||
{
|
||||
var pathFormat = Path.Combine(globalSettings.LogDirectory, $"{globalSettings.ProjectName.ToLowerInvariant()}.log");
|
||||
if (globalSettings.LogDirectoryByProject)
|
||||
{
|
||||
pathFormat = Path.Combine(globalSettings.LogDirectory, globalSettings.ProjectName, "log.txt");
|
||||
}
|
||||
config.WriteTo.File(pathFormat, rollOnFileSizeLimit: true,
|
||||
fileSizeLimitBytes: globalSettings.LogRollBySizeLimit);
|
||||
logging.AddFile(context.Configuration.GetSection("Logging"));
|
||||
}
|
||||
else
|
||||
{
|
||||
var pathFormat = Path.Combine(globalSettings.LogDirectory, $"{globalSettings.ProjectName.ToLowerInvariant()}_{{Date}}.log");
|
||||
if (globalSettings.LogDirectoryByProject)
|
||||
var globalSettingsSection = context.Configuration.GetSection("GlobalSettings");
|
||||
var loggingOptions = new LegacyFileLoggingOptions();
|
||||
globalSettingsSection.Bind(loggingOptions);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(loggingOptions.LogDirectory))
|
||||
{
|
||||
pathFormat = Path.Combine(globalSettings.LogDirectory, globalSettings.ProjectName, "{Date}.txt");
|
||||
return;
|
||||
}
|
||||
|
||||
var projectName = loggingOptions.ProjectName
|
||||
?? context.HostingEnvironment.ApplicationName;
|
||||
|
||||
if (loggingOptions.LogRollBySizeLimit.HasValue)
|
||||
{
|
||||
var pathFormat = loggingOptions.LogDirectoryByProject
|
||||
? Path.Combine(loggingOptions.LogDirectory, projectName, "log.txt")
|
||||
: Path.Combine(loggingOptions.LogDirectory, $"{projectName.ToLowerInvariant()}.log");
|
||||
|
||||
logging.AddFile(
|
||||
pathFormat: pathFormat,
|
||||
fileSizeLimitBytes: loggingOptions.LogRollBySizeLimit.Value
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
var pathFormat = loggingOptions.LogDirectoryByProject
|
||||
? Path.Combine(loggingOptions.LogDirectory, projectName, "{Date}.txt")
|
||||
: Path.Combine(loggingOptions.LogDirectory, $"{projectName.ToLowerInvariant()}_{{Date}}.log");
|
||||
|
||||
logging.AddFile(
|
||||
pathFormat: pathFormat
|
||||
);
|
||||
}
|
||||
config.WriteTo.RollingFile(pathFormat);
|
||||
}
|
||||
config
|
||||
.Enrich.FromLogContext()
|
||||
.Enrich.WithProperty("Project", globalSettings.ProjectName);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var serilog = config.CreateLogger();
|
||||
|
||||
if (logSentryWarning)
|
||||
{
|
||||
serilog.Warning("Sentry for logging has been deprecated. Read more: https://btwrdn.com/log-deprecation");
|
||||
}
|
||||
|
||||
if (logSyslogWarning)
|
||||
{
|
||||
serilog.Warning("Syslog for logging has been deprecated. Read more: https://btwrdn.com/log-deprecation");
|
||||
}
|
||||
|
||||
builder.AddSerilog(serilog);
|
||||
|
||||
return builder;
|
||||
/// <summary>
|
||||
/// Our own proprietary options that we've always supported in `GlobalSettings` configuration section.
|
||||
/// </summary>
|
||||
private class LegacyFileLoggingOptions
|
||||
{
|
||||
public string? ProjectName { get; set; }
|
||||
public string? LogDirectory { get; set; } = "/etc/bitwarden/logs";
|
||||
public bool LogDirectoryByProject { get; set; } = true;
|
||||
public long? LogRollBySizeLimit { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user