using Microsoft.Extensions.Configuration; using Serilog; using Serilog.Configuration; using Serilog.Events; using Serilog.Formatting; using System; namespace AWS.Logger.SeriLog { /// /// Extensions methods for to register /// public static class AWSLoggerSeriLogExtension { internal const string LOG_GROUP = "Serilog:LogGroup"; internal const string DISABLE_LOG_GROUP_CREATION = "Serilog:DisableLogGroupCreation"; internal const string REGION = "Serilog:Region"; internal const string SERVICEURL = "Serilog:ServiceUrl"; internal const string PROFILE = "Serilog:Profile"; internal const string PROFILE_LOCATION = "Serilog:ProfilesLocation"; internal const string BATCH_PUSH_INTERVAL = "Serilog:BatchPushInterval"; internal const string BATCH_PUSH_SIZE_IN_BYTES = "Serilog:BatchPushSizeInBytes"; internal const string MAX_QUEUED_MESSAGES = "Serilog:MaxQueuedMessages"; internal const string LOG_STREAM_NAME_SUFFIX = "Serilog:LogStreamNameSuffix"; internal const string LOG_STREAM_NAME_PREFIX = "Serilog:LogStreamNamePrefix"; internal const string LIBRARY_LOG_FILE_NAME = "Serilog:LibraryLogFileName"; internal const string LIBRARY_LOG_ERRORS = "Serilog:LibraryLogErrors"; internal const string FLUSH_TIMEOUT = "Serilog:FlushTimeout"; /// /// AWSSeriLogger target that is called when the customer is using /// Serilog.Settings.Configuration to set the SeriLogger configuration /// using a Json input. /// public static LoggerConfiguration AWSSeriLog( this LoggerSinkConfiguration loggerConfiguration, IConfiguration configuration, IFormatProvider iFormatProvider = null, ITextFormatter textFormatter = null, LogEventLevel restrictedToMinimumLevel = LogEventLevel.Verbose) { AWSLoggerConfig config = new AWSLoggerConfig(); config.LogGroup = configuration[LOG_GROUP]; if (configuration[DISABLE_LOG_GROUP_CREATION] != null) { config.DisableLogGroupCreation = bool.Parse(configuration[DISABLE_LOG_GROUP_CREATION]); } if (configuration[REGION] != null) { config.Region = configuration[REGION]; } if (configuration[SERVICEURL] != null) { config.ServiceUrl = configuration[SERVICEURL]; } if (configuration[PROFILE] != null) { config.Profile = configuration[PROFILE]; } if (configuration[PROFILE_LOCATION] != null) { config.ProfilesLocation = configuration[PROFILE_LOCATION]; } if (configuration[BATCH_PUSH_INTERVAL] != null) { config.BatchPushInterval = TimeSpan.FromMilliseconds(Int32.Parse(configuration[BATCH_PUSH_INTERVAL])); } if (configuration[BATCH_PUSH_SIZE_IN_BYTES] != null) { config.BatchSizeInBytes = Int32.Parse(configuration[BATCH_PUSH_SIZE_IN_BYTES]); } if (configuration[MAX_QUEUED_MESSAGES] != null) { config.MaxQueuedMessages = Int32.Parse(configuration[MAX_QUEUED_MESSAGES]); } if (configuration[LOG_STREAM_NAME_SUFFIX] != null) { config.LogStreamNameSuffix = configuration[LOG_STREAM_NAME_SUFFIX]; } if (configuration[LOG_STREAM_NAME_PREFIX] != null) { config.LogStreamNamePrefix = configuration[LOG_STREAM_NAME_PREFIX]; } if (configuration[LIBRARY_LOG_FILE_NAME] != null) { config.LibraryLogFileName = configuration[LIBRARY_LOG_FILE_NAME]; } if (configuration[LIBRARY_LOG_ERRORS] != null) { config.LibraryLogErrors = Boolean.Parse(configuration[LIBRARY_LOG_ERRORS]); } if (configuration[FLUSH_TIMEOUT] != null) { config.FlushTimeout = TimeSpan.FromMilliseconds(Int32.Parse(configuration[FLUSH_TIMEOUT])); } return AWSSeriLog(loggerConfiguration, config, iFormatProvider, textFormatter, restrictedToMinimumLevel); } /// /// AWSSeriLogger target that is called when the customer /// explicitly creates a configuration of type AWSLoggerConfig /// to set the SeriLogger configuration. /// public static LoggerConfiguration AWSSeriLog( this LoggerSinkConfiguration loggerConfiguration, AWSLoggerConfig configuration = null, IFormatProvider iFormatProvider = null, ITextFormatter textFormatter = null, LogEventLevel restrictedToMinimumLevel = LogEventLevel.Verbose) { return loggerConfiguration.Sink(new AWSSink(configuration, iFormatProvider, textFormatter), restrictedToMinimumLevel); } } }