/// <summary>
        /// Adds a <see cref="RollingFileLogProvider"/> to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="configureOptions">
        /// A delegate to configure the <see cref="RollingFileLogProviderOptions"/> object that is used to
        /// configure the log provider.
        /// </param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddRollingFileLogProvider(this ILoggerBuilder builder,
                                                               Action <RollingFileLogProviderOptions> configureOptions = null)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddLogProvider(serviceProvider =>
            {
                var optionsLoggerName = builder.LoggerName == Logger.DefaultName
                    ? Options.DefaultName
                    : builder.LoggerName;

                var optionsMonitor = serviceProvider.GetService <IOptionsMonitor <RollingFileLogProviderOptions> >();
                var options = optionsMonitor?.Get(optionsLoggerName) ?? new RollingFileLogProviderOptions();
                configureOptions?.Invoke(options);

                var formatter = options.FormatterRegistration?.Invoke(serviceProvider)
                                ?? new TemplateLogFormatter(FileLogProvider.DefaultTemplate);

                if (optionsMonitor != null && options.ReloadOnChange)
                {
                    return new ReloadingLogProvider <RollingFileLogProviderOptions>(
                        optionsMonitor, options, CreateLogProvider, builder.LoggerName, configureOptions);
                }

                return CreateLogProvider(options);

                ILogProvider CreateLogProvider(RollingFileLogProviderOptions o) =>
                new RollingFileLogProvider(o.File, formatter, o.Level, o.Timeout,
                                           o.MaxFileSizeKilobytes, o.MaxArchiveCount, o.RolloverPeriod);
            }));
        }
        /// <summary>
        /// Adds a <see cref="FileLogProvider"/>, formatted with the <see cref="ILogFormatter"/>
        /// returned by the formatter registration, to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="formatterRegistration">
        /// The method used to create the <see cref="ILogFormatter"/> of the log provider.
        /// </param>
        /// <param name="file">The file to write to.</param>
        /// <param name="level">The logging level of the log provider.</param>
        /// <param name="timeout">The timeout of the log provider.</param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddFileLogProvider(this ILoggerBuilder builder,
                                                        Func <IServiceProvider, ILogFormatter> formatterRegistration,
                                                        string file      = null,
                                                        LogLevel?level   = null,
                                                        TimeSpan?timeout = null)
        {
            if (formatterRegistration is null)
            {
                throw new ArgumentNullException(nameof(formatterRegistration));
            }

            return(builder.AddFileLogProvider(options =>
            {
                options.FormatterRegistration = formatterRegistration;
                if (file != null)
                {
                    options.File = file;
                }
                if (level != null)
                {
                    options.Level = level.Value;
                }
                if (timeout != null)
                {
                    options.Timeout = timeout;
                }
            }));
        }
Exemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MQEventStorager"/> class.
 /// </summary>
 /// <param name="messageProducer">The message producer.</param>
 /// <param name="jsonSerializer">The json serializer.</param>
 /// <param name="eventFilter">The eventFilter.</param>
 /// <param name="loggerBuilder">The logger builder.</param>
 protected MQEventStorager(IMessageProducer messageProducer, IJsonSerializer jsonSerializer, Func <IEvent, EventBehaviorStorager, bool> eventFilter, ILoggerBuilder loggerBuilder)
 {
     this.messageProducer = messageProducer;
     this.jsonSerializer  = jsonSerializer ?? SerializeEnvironment.JsonSerializer;
     this.loggerBuilder   = loggerBuilder ?? LoggerBuilder.Empty;
     this.eventFilter     = eventFilter;
 }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MQCommandStreamStorager"/> class.
 /// </summary>
 /// <param name="messageProducer">The message producer.</param>
 /// <param name="jsonSerializer">The json serializer.</param>
 /// <param name="loggerBuilder">The logger builder.</param>
 protected MQCommandStreamStorager(IMessageProducer messageProducer, IJsonSerializer jsonSerializer, ILoggerBuilder loggerBuilder)
 {
     this.messageProducer       = messageProducer;
     this.jsonSerializer        = jsonSerializer ?? SerializeEnvironment.JsonSerializer;
     this.loggerBuilder         = loggerBuilder ?? LoggerBuilder.Empty;
     this.commandStreamAnalyser = new DefaultCommandStreamAnalyser();
 }
Exemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MQEventStreamStorager"/> class.
 /// </summary>
 /// <param name="messageProducer">The message producer.</param>
 /// <param name="jsonSerializer">The json serializer.</param>
 /// <param name="eventFilter">The eventFilter.</param>
 /// <param name="loggerBuilder">The logger builder.</param>
 protected MQEventStreamStorager(IMessageProducer messageProducer, IJsonSerializer jsonSerializer, Func <IOperateEvent, EventBehaviorStorager, bool> eventFilter, ILoggerBuilder loggerBuilder)
 {
     this.messageProducer     = messageProducer;
     this.jsonSerializer      = jsonSerializer ?? SerializeEnvironment.JsonSerializer;
     this.loggerBuilder       = loggerBuilder ?? LoggerBuilder.Empty;
     this.eventFilter         = eventFilter;
     this.eventStreamAnalyser = new DefaultEventStreamAnalyser();
 }
Exemplo n.º 6
0
 public PermissionController(ICommandBus commandBus,
                             ILoggerBuilder loggerBuilder,
                             IPermissionQuery permissionQuery)
 {
     this.commandBus      = commandBus;
     this.loggerBuilder   = loggerBuilder;
     this.permissionQuery = permissionQuery;
 }
        public void AddContextProviderMethodSadPath()
        {
            ILoggerBuilder builder = null;

            Action act = () => builder.AddContextProvider <TestContextProvider>();

            act.Should().ThrowExactly <ArgumentNullException>().WithMessage("*builder*");
        }
        public void AddRollingFileLogProviderMethod5SadPath()
        {
            ILoggerBuilder builder = null;

            Action act = () => builder.AddRollingFileLogProvider();

            act.Should().ThrowExactly <ArgumentNullException>().WithMessage("*builder*");
        }
Exemplo n.º 9
0
        public ApplicationService(IUnitOfWork unitOfWork, IMapper mapper, ITokenBuilder tokenBuilder, ICachingHandler cachingHandler, ILoggerBuilder loggingBuilder)
        {
            _unitOfWork     = unitOfWork;
            _mapper         = mapper;
            _tokenBuilder   = tokenBuilder;
            _cachingHandler = cachingHandler;

            this.loggingBuilder = loggingBuilder;
        }
        /// <summary>
        /// Adds an <see cref="IContextProvider"/> of type <typeparamref name="TContextProvider"/> to the logger.
        /// </summary>
        /// <typeparam name="TContextProvider">The type of <see cref="IContextProvider"/> to add to the logger.</typeparam>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="parameters">
        /// Constructor arguments for type <typeparamref name="TContextProvider"/> that are not provided by the
        /// <see cref="IServiceProvider"/>.
        /// </param>
        /// <returns>The same <see cref="ILoggerBuilder"/></returns>
        public static ILoggerBuilder AddContextProvider <TContextProvider>(this ILoggerBuilder builder, params object[] parameters)
            where TContextProvider : IContextProvider
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddContextProvider(serviceProvider => ActivatorUtilities.CreateInstance <TContextProvider>(serviceProvider, parameters)));
        }
 /// <summary>
 /// Adds a <see cref="DebugLogProvider"/>, formatted with a <see cref="ILogFormatter"/> of
 /// type <typeparamref name="TLogFormatter"/>, to the logger.
 /// </summary>
 /// <typeparam name="TLogFormatter">
 /// The type of <see cref="ILogFormatter"/> that the log provider uses for formatting logs.
 /// </typeparam>
 /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
 /// <param name="level">The logging level of the log provider.</param>
 /// <param name="timeout">The timeout of the log provider.</param>
 /// <param name="logFormatterParameters">
 /// Constructor arguments for type <typeparamref name="TLogFormatter"/> that are not provided
 /// by the <see cref="IServiceProvider"/>.
 /// </param>
 /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
 public static ILoggerBuilder AddDebugLogProvider <TLogFormatter>(this ILoggerBuilder builder,
                                                                  LogLevel?level   = null,
                                                                  TimeSpan?timeout = null,
                                                                  params object[] logFormatterParameters)
     where TLogFormatter : ILogFormatter
 {
     return(builder.AddDebugLogProvider(serviceProvider =>
                                        ActivatorUtilities.CreateInstance <TLogFormatter>(serviceProvider, logFormatterParameters),
                                        level, timeout));
 }
        /// <summary>
        /// Adds a <see cref="DebugLogProvider"/>, formatted with the specified <see cref="ILogFormatter"/>,
        /// to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="formatter">
        /// The <see cref="ILogFormatter"/> that the log provider uses for formatting logs.
        /// </param>
        /// <param name="level">The logging level of the log provider.</param>
        /// <param name="timeout">The timeout of the log provider.</param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddDebugLogProvider(this ILoggerBuilder builder,
                                                         ILogFormatter formatter,
                                                         LogLevel?level   = null,
                                                         TimeSpan?timeout = null)
        {
            if (formatter is null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            return(builder.AddDebugLogProvider(serviceProvider => formatter, level, timeout));
        }
        /// <summary>
        /// Adds a <see cref="DebugLogProvider"/>, formatted with a <see cref="TemplateLogFormatter"/>,
        /// to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="template">
        /// The template of the <see cref="TemplateLogFormatter"/> that the log provider uses for formatting
        /// logs.
        /// </param>
        /// <param name="level">The logging level of the log provider.</param>
        /// <param name="timeout">The timeout of the log provider.</param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddDebugLogProvider(this ILoggerBuilder builder,
                                                         string template,
                                                         LogLevel?level   = null,
                                                         TimeSpan?timeout = null)
        {
            if (template is null)
            {
                throw new ArgumentNullException(nameof(template));
            }

            return(builder.AddDebugLogProvider <TemplateLogFormatter>(level, timeout, template));
        }
Exemplo n.º 14
0
 public VCodeController(ICommandBus commandBus,
                        ILoggerBuilder loggerBuilder,
                        IJsonSerializer jsonSerializer,
                        IEmailCodeQuery emailCodeQuery,
                        IMobileCodeQuery mobileCodeQuery)
 {
     this.commandBus      = commandBus;
     this.loggerBuilder   = loggerBuilder;
     this.jsonSerializer  = jsonSerializer;
     this.emailCodeQuery  = emailCodeQuery;
     this.mobileCodeQuery = mobileCodeQuery;
 }
Exemplo n.º 15
0
        /// <summary>
        /// Build with Serilog using existing Serilog configuration
        /// </summary>
        /// <param name="builder"><see cref="LoggerBuilder"/></param>
        /// <param name="loggerConfiguration"><see cref="LoggerConfiguration"/></param>
        /// <param name="configuration"><see cref="IConfiguration"/></param>
        /// <returns><see cref="ILoggerBuilder"/></returns>
        public static ILoggerBuilder UseSerilog(this ILoggerBuilder builder,
                                                LoggerConfiguration loggerConfiguration,
                                                IConfiguration configuration)
        {
            var levelSwitch   = new LoggingLevelSwitch();
            var loggerFactory = new LoggerFactory();
            var config        = loggerConfiguration.MinimumLevel.ControlledBy(levelSwitch);

            loggerFactory.AddSerilog(config.CreateLogger(), dispose: true);

            return(new SerilogBuilder(loggerFactory, configuration, levelSwitch));
        }
Exemplo n.º 16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ex"></param>
        /// <param name="message"></param>
        protected override void HandleException(Exception ex, string message)
        {
            if (this.loggerBuilder != null)
            {
                this.loggerBuilder.Build(typeof(EventRecoveryManager)).Error(message, ex);
                return;
            }

            using (var scope = this.serviceLocator.BeginLifetimeScope())
            {
                this.loggerBuilder = scope.ResolveOptional <ILoggerBuilder>();
                this.loggerBuilder.Build(typeof(EventRecoveryManager)).Error(message, ex);
            }
        }
 /// <summary>
 /// Adds a <see cref="RollingFileLogProvider"/>, formatted with a <see cref="ILogFormatter"/> of
 /// type <typeparamref name="TLogFormatter"/>, to the logger.
 /// </summary>
 /// <typeparam name="TLogFormatter">
 /// The type of <see cref="ILogFormatter"/> that the log provider uses for formatting logs.
 /// </typeparam>
 /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
 /// <param name="file">The file to write to.</param>
 /// <param name="level">The logging level of the log provider.</param>
 /// <param name="timeout">The timeout of the log provider.</param>
 /// <param name="maxFileSizeKilobytes">
 /// The maximum file size, in bytes, of the file. If the file size is greater than this value,
 /// it is archived.
 /// </param>
 /// <param name="maxArchiveCount">
 /// The maximum number of archive files that will be kept. If the number of archive files is
 /// greater than this value, then they are deleted, oldest first.
 /// </param>
 /// <param name="rolloverPeriod">
 /// The rollover period, indicating if/how the file should archived on a periodic basis.
 /// </param>
 /// <param name="logFormatterParameters">
 /// Constructor arguments for type <typeparamref name="TLogFormatter"/> that are not provided
 /// by the <see cref="IServiceProvider"/>.
 /// </param>
 /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
 public static ILoggerBuilder AddRollingFileLogProvider <TLogFormatter>(this ILoggerBuilder builder,
                                                                        string file                   = null,
                                                                        LogLevel?level                = null,
                                                                        TimeSpan?timeout              = null,
                                                                        int?maxFileSizeKilobytes      = null,
                                                                        int?maxArchiveCount           = null,
                                                                        RolloverPeriod?rolloverPeriod = null,
                                                                        params object[] logFormatterParameters)
     where TLogFormatter : ILogFormatter
 {
     return(builder.AddRollingFileLogProvider(serviceProvider =>
                                              ActivatorUtilities.CreateInstance <TLogFormatter>(serviceProvider, logFormatterParameters),
                                              file, level, timeout, maxFileSizeKilobytes, maxArchiveCount, rolloverPeriod));
 }
Exemplo n.º 18
0
        /// <summary>
        /// 在出错的时候写日志
        /// </summary>
        /// <param name="runtimeModeProvider">环境运行提供者,如果为空则不写,如有需要,则重写该方法则可</param>
        /// <param name="loggerBuilder">日志构建者</param>
        /// <param name="executor">执行者</param>
        /// <param name="exception">异常信息</param>
        /// <param name="context">上下文</param>
        public void OnError(IRuntimeModeProvider runtimeModeProvider, ILoggerBuilder loggerBuilder, object executor, Exception exception, object context)
        {
            var logger = this.GetLogger(runtimeModeProvider, loggerBuilder, executor, exception, context);

            if (logger == null)
            {
                return;
            }

            if (!this.Match(runtimeModeProvider, loggerBuilder, executor, exception, context))
            {
                return;
            }

            this.Write(runtimeModeProvider, logger, executor, exception, context);
        }
        public void Registering_Logger_With_DI_Container2()
        {
            IServiceCollection serviceCollection = new ServiceCollection();
            // Registering TacitusLogger with Microsoft DI as a singleton.
            ILoggerBuilder loggerBuilder = serviceCollection.TacitusLogger("logger1");

            loggerBuilder.ForAllLogs()
            .Console()
            .Add()
            .BuildLogger();

            var serviceProvider = serviceCollection.BuildServiceProvider();

            // Resolving the dependency
            var logger = serviceProvider.GetService <ILogger>();
        }
        /// <summary>
        /// Adds a <see cref="RollingFileLogProvider"/>, formatted with the specified <see cref="ILogFormatter"/>,
        /// to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="formatter">
        /// The <see cref="ILogFormatter"/> that the log provider uses for formatting logs.
        /// </param>
        /// <param name="file">The file to write to.</param>
        /// <param name="level">The logging level of the log provider.</param>
        /// <param name="timeout">The timeout of the log provider.</param>
        /// <param name="maxFileSizeKilobytes">
        /// The maximum file size, in bytes, of the file. If the file size is greater than this value,
        /// it is archived.
        /// </param>
        /// <param name="maxArchiveCount">
        /// The maximum number of archive files that will be kept. If the number of archive files is
        /// greater than this value, then they are deleted, oldest first.
        /// </param>
        /// <param name="rolloverPeriod">
        /// The rollover period, indicating if/how the file should archived on a periodic basis.
        /// </param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddRollingFileLogProvider(this ILoggerBuilder builder,
                                                               ILogFormatter formatter,
                                                               string file                   = null,
                                                               LogLevel?level                = null,
                                                               TimeSpan?timeout              = null,
                                                               int?maxFileSizeKilobytes      = null,
                                                               int?maxArchiveCount           = null,
                                                               RolloverPeriod?rolloverPeriod = null)
        {
            if (formatter is null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            return(builder.AddRollingFileLogProvider(serviceProvider => formatter,
                                                     file, level, timeout, maxFileSizeKilobytes, maxArchiveCount, rolloverPeriod));
        }
Exemplo n.º 21
0
        internal static MessageExcutingElement[] FindMessageExcutingElement <TMessage>(MessageSubscriberProvider provider, TMessage e) where TMessage : IMessage
        {
            var messageHandlers = provider.FindSubscriber <TMessage>();

            if (messageHandlers == null || messageHandlers.Length == 0)
            {
                return new MessageExcutingElement[] { }
            }
            ;

            /*先获取到每个MessageHandler的所有属性*/
            var elements = new List <MessageExcutingElement>(messageHandlers.Length);

            for (var i = 0; i < messageHandlers.Length; i++)
            {
                var            item            = messageHandlers[i];
                var            handlerType     = item.GetType();
                var            attributes      = HandlerBehaviorStorager.Default.GetAttributes(handlerType);
                var            loggerAttribute = ObjectExtension.GetAttribute <LoggerAttribute>(attributes);
                ILoggerBuilder loggerBuilder   = null;
                if (loggerAttribute != null)
                {
                    try
                    {
                        loggerBuilder = provider.Scope.Resolve <ILoggerBuilder>(loggerAttribute.RegisterKey);
                    }
                    catch
                    {
                    }
                }

                elements.Add(new MessageExcutingElement()
                {
                    MessageContext     = provider.FindMessageContext(),
                    MessageHandler     = item,
                    MessageHandlerType = handlerType,
                    LoggerBuilder      = loggerBuilder,
                });
            }

            return(elements.ToArray());
        }

        #endregion
    }
Exemplo n.º 22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MessageDispatcher"/> class.
        /// </summary>
        /// <param name="messageConsumer">消费者接口</param>
        /// <param name="jsonSerializer">json序列号接口</param>
        /// <param name="sleepTimeSpan">用于控制线程while的频率</param>
        /// <param name="loggerBuilder">统计消息发布日志,因为不同的发布者可能都有自己的日志发布,所以这个接口通常不用赋值</param>
        public MessageDispatcher(IMessageConsumer messageConsumer, IJsonSerializer jsonSerializer, ILoggerBuilder loggerBuilder, TimeSpan sleepTimeSpan) : base(null, typeof(MessageDispatcher).Name)
        {
            if (messageConsumer == null)
            {
                throw new ArgumentNullException("消费者接口不能为空");
            }

            if (jsonSerializer == null)
            {
                throw new ArgumentNullException("json序列号接口不能为空");
            }

            this.messageConsumer = messageConsumer;
            this.jsonSerializer  = jsonSerializer;
            this.loggerBuilder   = loggerBuilder ?? LoggerBuilder.Empty;
            this.sleepTimeSpan   = sleepTimeSpan;

            this.Replace(Change);
        }
Exemplo n.º 23
0
        /// <summary>
        /// dozeTime = TimeSpan.FromMinutes(1)表示1分发一个命令,如果还有命令,则一直发(间隔为1秒),此时RepeatWork返回false
        /// waitTime = TimeSpan.Zero 当任务完成,则进入睡眠状态,直到被唤醒,此时RepeatWork返回true
        /// </summary>
        /// <param name="storager"></param>
        /// <param name="commandBus"></param>
        /// <param name="eventBus"></param>
        /// <param name="serviceLocator"></param>
        /// <param name="loggerBuilder"></param>
        public CommandRecoveryManager(IFailRecoveryStorager storager, IServiceLocator serviceLocator, ICommandBus commandBus, IEventBus eventBus, ILoggerBuilder loggerBuilder) : base(null, typeof(CommandRecoveryManager).Name)
        {
            this.storager       = storager;
            this.commandBus     = commandBus;
            this.eventBus       = eventBus;
            this.serviceLocator = serviceLocator;
            this.loggerBuilder  = loggerBuilder;
            if (storager is IWorkTigger && ((IWorkTigger)storager).Timer != TimeSpan.Zero)
            {
                this.sleepTimeSpan = ((IWorkTigger)storager).Timer;
            }

            if (this.sleepTimeSpan == TimeSpan.Zero)
            {
                this.sleepTimeSpan = TimeSpan.FromSeconds(10);
            }

            this.Replace(Change).Start();
        }
        /// <summary>
        /// Adds a <see cref="RollingFileLogProvider"/>, formatted with the <see cref="ILogFormatter"/>
        /// returned by the formatter registration, to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="formatterRegistration">
        /// The method used to create the <see cref="ILogFormatter"/> of the log provider.
        /// </param>
        /// <param name="file">The file to write to.</param>
        /// <param name="level">The logging level of the log provider.</param>
        /// <param name="timeout">The timeout of the log provider.</param>
        /// <param name="maxFileSizeKilobytes">
        /// The maximum file size, in bytes, of the file. If the file size is greater than this value,
        /// it is archived.
        /// </param>
        /// <param name="maxArchiveCount">
        /// The maximum number of archive files that will be kept. If the number of archive files is
        /// greater than this value, then they are deleted, oldest first.
        /// </param>
        /// <param name="rolloverPeriod">
        /// The rollover period, indicating if/how the file should archived on a periodic basis.
        /// </param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddRollingFileLogProvider(this ILoggerBuilder builder,
                                                               Func <IServiceProvider, ILogFormatter> formatterRegistration,
                                                               string file                   = null,
                                                               LogLevel?level                = null,
                                                               TimeSpan?timeout              = null,
                                                               int?maxFileSizeKilobytes      = null,
                                                               int?maxArchiveCount           = null,
                                                               RolloverPeriod?rolloverPeriod = null)
        {
            if (formatterRegistration is null)
            {
                throw new ArgumentNullException(nameof(formatterRegistration));
            }

            return(builder.AddRollingFileLogProvider(options =>
            {
                options.FormatterRegistration = formatterRegistration;
                if (file != null)
                {
                    options.File = file;
                }
                if (level != null)
                {
                    options.Level = level.Value;
                }
                if (timeout != null)
                {
                    options.Timeout = timeout;
                }
                if (maxFileSizeKilobytes != null)
                {
                    options.MaxFileSizeKilobytes = maxFileSizeKilobytes.Value;
                }
                if (maxArchiveCount != null)
                {
                    options.MaxArchiveCount = maxArchiveCount.Value;
                }
                if (rolloverPeriod != null)
                {
                    options.RolloverPeriod = rolloverPeriod.Value;
                }
            }));
        }
Exemplo n.º 25
0
        /// <summary>
        /// 查找投资服务对象
        /// </summary>
        /// <returns></returns>
        private ILoggerBuilder ResolveLoggerBuilder()
        {
            if (ContainerContext.Current == null)
            {
                return LoggerBuilder.Empty;
            }

            ILoggerBuilder @object = null;
            if (!registerLoggerBuilder.HasValue)
            {
                registerLoggerBuilder = ContainerContext.Current.ServiceLocator.TryResolve(ref @object);
                return @object;
            };

            if (registerLoggerBuilder.Value)
            {
                return ContainerContext.Current.ServiceLocator.Resolve<ILoggerBuilder>();
            }

            return null;
        }
        public void Build(Project project, ProjectItem <EventSourceModel> model)
        {
            var eventSource = model.Content;

            if (eventSource == null)
            {
                LogError($"{model.Name} should have a content of type {typeof(EventSourceModel).Name} set but found {model.Content?.GetType().Name ?? "null"}");
                return;
            }

            var loggerBuilders = new ILoggerBuilder[]
            {
                new LoggerTemplateBuilder(),
                new LoggerKeywordsBuilder(),
                new EventSourceCorrelatingEventsBuilder(),
                new LoggerEventScopeExpanderBuilder(),
                new LoggerImplicitArgumentsBuilder(),
                new LoggerOverrideArgumentsBuilder(),
                new EventSourceEventsBuilder(),
                new LoggerImplementationBuilder(),
                new LoggerEventSourcePartialBuilder(),
            }.Union(project.GetExtensions <ILoggerBuilder>()).ToArray();
            var loggerStartId = 10000;

            foreach (var logger in eventSource.Loggers)
            {
                logger.StartId = logger.StartId ?? loggerStartId;

                logger.EventSource = eventSource;

                foreach (var builder in loggerBuilders)
                {
                    PassAlongLoggers(builder as IWithLogging);
                    builder.Build(project, model, logger);
                }

                loggerStartId += 1000;
            }
        }
Exemplo n.º 27
0
        /// <summary>
        /// 是否匹配
        /// </summary>
        /// <param name="runtimeModeProvider">环境运行提供者,如果为空则不写,如有需要,则重写该方法则可</param>
        /// <param name="loggerBuilder">日志构建者</param>
        /// <param name="executor">执行者</param>
        /// <param name="exception">异常信息</param>
        /// <param name="context">上下文</param>
        protected virtual bool Match(IRuntimeModeProvider runtimeModeProvider, ILoggerBuilder loggerBuilder, object executor, Exception exception, object context)
        {
            if (runtimeModeProvider == null)
            {
                return(false);
            }

            if (runtimeModeProvider.RuntimeModeArray == null || runtimeModeProvider.RuntimeModeArray.Length <= 0)
            {
                return(true);
            }

            foreach (var i in runtimeModeProvider.RuntimeModeArray)
            {
                if (this.RuntimeMode.IsEquals(i.RuntimeMode))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 28
0
        public async Task Invoke(HttpContext context, ILoggerBuilder loggingBuilder)
        {
            try
            {
                var request = await FormatRequest(context.Request);

                loggingBuilder.AddRequest(request);
                loggingBuilder.SetProperty(nameof(LoggingModel.RequestUrl),
                                           $"{context.Request.Scheme}://{context.Request.Host}{context.Request.Path}{context.Request.QueryString}");
                loggingBuilder.SetProperty(nameof(LoggingModel.RequestMethod), context.Request.Method);
                loggingBuilder.SetProperty(nameof(LoggingModel.RequestHeaders), JsonConvert.SerializeObject(context.Request.Headers));

                var originalBodyStream = context.Response.Body;

                using (var responseBody = new MemoryStream())
                {
                    context.Response.Body = responseBody;

                    await _next(context);

                    var response = await FormatResponse(context.Response);

                    await responseBody.CopyToAsync(originalBodyStream);

                    loggingBuilder.AddResponse(response);
                    loggingBuilder.SetProperty(nameof(LoggingModel.HttpStatus), context.Response.StatusCode);
                    loggingBuilder.SetProperty(nameof(LoggingModel.HostIp), GetHostIp());
                    loggingBuilder.SetProperty(nameof(LoggingModel.ClientIp), context.Features.Get <IHttpConnectionFeature>()?.RemoteIpAddress?.ToString());
                    var loggingModel = loggingBuilder.GetLogging();

                    //TODO:Save API request and response in DB or File
                }
            }
            catch (Exception ex)
            {
                //TODO: file log in case of logging failure or invalidate the request based on your business
            }
        }
        /// <summary>
        /// Adds a <see cref="DebugLogProvider"/> to the logger.
        /// </summary>
        /// <param name="builder">The <see cref="ILoggerBuilder"/>.</param>
        /// <param name="configureOptions">
        /// A delegate to configure the <see cref="DebugLogProviderOptions"/> object that is used to
        /// configure the log provider.
        /// </param>
        /// <returns>The same <see cref="ILoggerBuilder"/>.</returns>
        public static ILoggerBuilder AddDebugLogProvider(this ILoggerBuilder builder,
                                                         Action <DebugLogProviderOptions> configureOptions = null)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddLogProvider(serviceProvider =>
            {
                var optionsLoggerName = builder.LoggerName == Logger.DefaultName
                    ? Options.DefaultName
                    : builder.LoggerName;

                var optionsMonitor = serviceProvider.GetService <IOptionsMonitor <DebugLogProviderOptions> >();
                var options = optionsMonitor?.Get(optionsLoggerName) ?? new DebugLogProviderOptions();
                configureOptions?.Invoke(options);

                var formatter = options.FormatterRegistration?.Invoke(serviceProvider)
                                ?? new TemplateLogFormatter(DebugLogProvider.DefaultTemplate);

                return new DebugLogProvider(formatter, options.Level, options.Timeout);
            }));
        }
 /// <summary>
 /// Adds the <see cref="HttpContextProvider"/> to the logger builder.
 /// </summary>
 /// <param name="builder">The logger builder.</param>
 /// <returns>The same logger builder.</returns>
 public static ILoggerBuilder AddHttpContextProvider(this ILoggerBuilder builder) =>
 builder.AddContextProvider <HttpContextProvider>();
Exemplo n.º 31
0
 void IWhiteLogLogger.AddLogger(ILoggerBuilder logger)
 {
     m_addLogger.Invoke(logger);
 }