예제 #1
0
        /// <summary>
        /// Build the Serilog instance.
        /// </summary>
        /// <param name="serilogOptions"><see cref="SerilogOptions" /></param>
        /// <param name="environmentName">Development|Production|Staging</param>
        /// <param name="configure"></param>
        /// <returns></returns>
        public static ILogger Create(SerilogOptions serilogOptions, string environmentName, Action <LoggerSinkConfiguration> configure = null)
        {
            if (serilogOptions == null)
            {
                serilogOptions = new SerilogOptions();
            }

            if (!serilogOptions.LogMinLevel.HasValue)
            {
                switch (environmentName.ToLower())
                {
                case "production":
                    serilogOptions.LogMinLevel = LogEventLevel.Information;
                    break;

                case "staging":
                    serilogOptions.LogMinLevel = LogEventLevel.Debug;
                    break;

                default:
                    serilogOptions.LogMinLevel = LogEventLevel.Verbose;
                    break;
                }
            }

            return(Create(serilogOptions, configure));
        }
예제 #2
0
        /// <summary>
        /// Build the Serilog instance.
        /// </summary>
        /// <param name="serilogOptions"><see cref="SerilogOptions" /></param>
        /// <param name="configure"></param>
        /// <returns></returns>
        public static ILogger Create(SerilogOptions serilogOptions, Action <LoggerSinkConfiguration> configure = null)
        {
            if (serilogOptions == null)
            {
                serilogOptions = new SerilogOptions();
            }

            var configuration = new LoggerConfiguration().Configue();

            if (!serilogOptions.LogMinLevel.HasValue)
            {
                serilogOptions.LogMinLevel = LogEventLevel.Debug;
            }

            configuration.ConfigueLevel(serilogOptions.LogMinLevel.Value);

            if (serilogOptions.Async)
            {
                configuration.WriteTo.Async(async =>
                {
                    Configue(async, serilogOptions, configure);
                });
            }
            else
            {
                Configue(configuration.WriteTo, serilogOptions, configure);
            }

            if (serilogOptions.SourceContextFilterOptions != null)
            {
                configuration.ConfigueSourceContextFilter(serilogOptions.SourceContextFilterOptions);
            }

            return(configuration.CreateLogger());
        }
예제 #3
0
        private static void Configue(LoggerSinkConfiguration configuration, SerilogOptions serilogOptions, Action <LoggerSinkConfiguration> configure = null)
        {
            var outputTemplate = serilogOptions.OutputTemplate ?? SerilogExtensions.DefaultOutputTemplate;

            JsonFormatter jsonFormatter = null;

            if (serilogOptions.FormatJson)
            {
                jsonFormatter = new JsonFormatter();
            }

            var obsoletePathFormat = serilogOptions.PathFormat;
            var path = serilogOptions.Path;

            //compatibility
            if (!string.IsNullOrWhiteSpace(obsoletePathFormat) && string.IsNullOrWhiteSpace(path))
            {
                path = obsoletePathFormat;
            }

            if (!string.IsNullOrWhiteSpace(path))
            {
                // whether relative path is used, the root directory is applied by default.
                if (!Path.IsPathRooted(path))
                {
#if NETFULL
                    path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path);
#else
                    path = Path.Combine(AppContext.BaseDirectory, path);
#endif
                }
            }
            else
            {
                //By default, the 'logs' directory of the root directory.
#if NETFULL
                path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", "log.log");
#else
                path = Path.Combine(AppContext.BaseDirectory, "logs", "log.log");
#endif
            }

            //stdout
            if (serilogOptions.StdOut)
            {
                if (serilogOptions.FormatJson)
                {
                    configuration.ConfigueStd(jsonFormatter);
                }
                else
                {
                    configuration.ConfigueStd(outputTemplate: outputTemplate);
                }
            }

            //file Record
            if (serilogOptions.RollingFile)
            {
                if (serilogOptions.FormatJson)
                {
                    configuration.ConfigueFile(jsonFormatter, path: path);
                }
                else
                {
                    configuration.ConfigueFile(path: path, outputTemplate: outputTemplate);
                }
            }

            //email
            if (serilogOptions.Email != null)
            {
                if (!string.IsNullOrWhiteSpace(serilogOptions.Email.Account) && !string.IsNullOrWhiteSpace(serilogOptions.Email.Password))
                {
                    serilogOptions.Email.NetworkCredentials = new NetworkCredential(serilogOptions.Email.Account, serilogOptions.Email.Password);
                }

                configuration.Email(serilogOptions.Email, outputTemplate: outputTemplate, restrictedToMinimumLevel: LogEventLevel.Warning);
            }

            configure?.Invoke(configuration);
        }