Esempio n. 1
0
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            ILoggerFactory loggerFactory,
            Tuple <IJsonLogger, IIxResolver> arguments,
            LoggerWebAppConfig webAppConfig)
        {
            IJsonLogger jsonLogger = arguments.Item1;

            app.UseForwardedHeaders(
                new ForwardedHeadersOptions
            {
                KnownNetworks =
                {
                    new IPNetwork(IPAddress.Any, 0)
                },
                ForwardedHeaders =
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
                    | ForwardedHeaders.XForwardedHost
            });

            // TODO: Add request dumping.
            app.UseDelegateExceptionHandler(
                async(context, ex) =>
            {
                jsonLogger.Error(
                    ex,
                    (_, e) =>
                    _("WebApp pipeline error").Exception(e));
            });

            app.UseCors("CorsPolicy");
            app.UseMvc();
        }
Esempio n. 2
0
 public QueryDumpMiddleware(
     RequestDelegate next,
     IJsonLogger logger)
 {
     _next = next;
     Log   = new ClassJsonLogger <QueryDumpMiddleware>(logger);
 }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AsyncResponseHandler{TResponseKey}"/> class.
        /// </summary>
        /// <param name="keyExtractor">The "key extractor" delegate.</param>
        /// <param name="logger">The logger.</param>
        /// <param name="useRequestBodyBuffering">Enables request body buffering (required for key extraction from the body).</param>
        /// <param name="handlerRegistrationTimeOut">Maximum allowed time to register receive delegate.</param>
        public AsyncResponseHandler(
            Func <HttpContext, TResponseKey> keyExtractor,
            IJsonLogger logger,
            bool useRequestBodyBuffering        = true,
            TimeSpan handlerRegistrationTimeOut = default(TimeSpan))
        {
            if (keyExtractor == null)
            {
                throw new ArgumentNullException(nameof(keyExtractor));
            }

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            if (handlerRegistrationTimeOut < TimeSpan.Zero)
            {
                throw new ArgumentOutOfRangeException(
                          nameof(handlerRegistrationTimeOut),
                          "Trap registration timeout should be positive.");
            }

            _keyExtractor = keyExtractor;
            Log           = new ClassJsonLogger <AsyncResponseHandler <TResponseKey> >(logger);

            _useRequestBodyBuffering = useRequestBodyBuffering;

            if (handlerRegistrationTimeOut == default(TimeSpan))
            {
                handlerRegistrationTimeOut = TimeSpan.FromSeconds(10);
            }

            _handlerRegistrationTimeOut = handlerRegistrationTimeOut;
        }
Esempio n. 4
0
 public Logger(IJsonLogger jsonLogger, IHtmlLogger htmlLogger, IStringHelper stringHelper, IConsoleManager consoleManager)
 {
     _jsonLogger = jsonLogger;
     _htmlLogger = htmlLogger;
     _stringHelper = stringHelper;
     _consoleManager = consoleManager;
 }
Esempio n. 5
0
 public Logger(IJsonLogger jsonLogger, IHtmlLogger htmlLogger, IStringHelper stringHelper, IConsoleManager consoleManager)
 {
     _jsonLogger     = jsonLogger;
     _htmlLogger     = htmlLogger;
     _stringHelper   = stringHelper;
     _consoleManager = consoleManager;
 }
Esempio n. 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="JsonInterceptedLogger"/> class.
        /// </summary>
        /// <param name="innerLogger">The inner logger.</param>
        /// <param name="interceptor">The interceptor.</param>
        public JsonInterceptedLogger(IJsonLogger innerLogger, [CanBeNull] JsonLogEntryInterceptor interceptor)
        {
            _innerLogger = innerLogger ?? throw new ArgumentNullException(nameof(innerLogger));
            interceptor  = interceptor.DoNothingIfNull();

            _builder = interceptor(this);
        }
Esempio n. 7
0
        public void SimpleTest()
        {
            IJsonLogger log = RootTestingEnvironment.Logger;

            log.Debug(
                10,
                (_, a) => _("Test")
                .Details(a.ToString()));
        }
Esempio n. 8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ScopedLogger"/> class.
        /// </summary>
        /// <param name="inner">The parent logger.</param>
        /// <param name="scopeId">Scope identifier object.</param>
        public ScopedLogger(IJsonLogger inner, object scopeId)
        {
            if (inner == null)
            {
                throw new ArgumentNullException(nameof(inner));
            }

            _inner   = inner;
            _scopeId = scopeId;
        }
Esempio n. 9
0
        private static void WriteLogEntry <T1, T2, T3>(
            IJsonLogger logger,
            LogSeverity severity,
            T1 arg1,
            T2 arg2,
            T3 arg3,
            Func <Func <string, ILogEntryBuilder>, T1, T2, T3, ILogEntryBuilder> logEntryBuilder,
            string callerFilePath,
            string callerMemberName,
            int callerLineNumber)
        {
            if (callerFilePath == null)
            {
                throw new ArgumentNullException(nameof(callerFilePath));
            }

            if (callerMemberName == null)
            {
                throw new ArgumentNullException(nameof(callerMemberName));
            }

            Instant instant = SystemClock.Instance.GetCurrentInstant();

            logger.AsyncHandler.RunAsync(
                (instantArg, callInfo, a1, a2, a3) =>
            {
                ILogEntryBuilder entryBuilder = logEntryBuilder(
                    msg => new DelegateLogEntryBuilderForLogEntry(
                        e =>
                {
                    e.Message = msg;
                    return(e);
                },
                        logger.SerializerSource),
                    a1,
                    a2,
                    a3);

                var entry = new LogEntry
                {
                    Severity   = severity,
                    Instant    = instant,
                    CallerInfo = callInfo
                };

                object buildedEntry = entryBuilder.Build(entry);
                logger.Log(buildedEntry);
            },
                instant,
                new CallerInfo(callerFilePath, callerMemberName, callerLineNumber),
                arg1,
                arg2,
                arg3);
        }
Esempio n. 10
0
            public SimplePersistence(
                IJsonLogger logger,
                ICollection <IPersistenceInitializer <SimplePersistence> > initializers)
                : base(logger)
            {
                if (initializers == null)
                {
                    throw new ArgumentNullException(nameof(initializers));
                }

                foreach (IPersistenceInitializer <SimplePersistence> initializer in initializers)
                {
                    initializer.Initialize(this);
                }

                Initialize();
            }
        /// <summary>
        /// Writes warning log entry.
        /// </summary>
        /// <param name="logger">Logger to write to.</param>
        /// <param name="logEntryBuilder">Log entry builder <c>delegate</c>.</param>
        /// <param name="callerFilePath">Log entry origin file path.</param>
        /// <param name="callerMemberName">Log entry origin member name.</param>
        /// <param name="callerLineNumber">Log entry origin line number.</param>
        public static void Warning(
            this IJsonLogger logger,
            Func <Func <string, ILogEntryBuilder>, ILogEntryBuilder> logEntryBuilder,
            [CallerFilePath] string callerFilePath     = null,
            [CallerMemberName] string callerMemberName = null,
            [CallerLineNumber] int callerLineNumber    = 0)
        {
            // ReSharper disable AssignNullToNotNullAttribute
            WriteLogEntry(
                logger,
                LogSeverity.Warning,
                logEntryBuilder,
                callerFilePath,
                callerMemberName,
                callerLineNumber);

            // ReSharper restore AssignNullToNotNullAttribute
        }
Esempio n. 12
0
        private ClusterNode(
            IIxHost indirectXHost,
            IWebHostBuilder webHostBuilder,
            IConfigurationRoot configRoot,
            IJsonLogger logger)
        {
            Log         = new ClassJsonLogger <ClusterNode>(logger);
            _executeCts = new CancellationTokenSource();
            _executeCancellationToken = _executeCts.Token;

            _indirectXHost = indirectXHost;
            _configRoot    = configRoot;

            Log.Info(_ => _("Starting Asp.Net core..."));

            _webHost = webHostBuilder
                       .UseStartup <ClusterNodeStartup>()
                       .Build();

            _webHost.Start();
            _hostLifetimeService = _webHost.Services.GetRequiredService <IApplicationLifetime>();

            Key = new ClusterNodeKey(_configRoot.GetValue(ClusterNodeIdKey, "single-node"));

            var addressesFeature = _webHost.ServerFeatures.Get <IServerAddressesFeature>();

            foreach (string addressesFeatureAddress in addressesFeature.Addresses)
            {
                Log.Info(
                    addressesFeatureAddress,
                    (_, addr) => _($"NodeId = '{Key.Code}' listening on: {addr}").Data(new { ListenAddress = addr }));
            }

            Console.CancelKeyPress += (sender, e) =>
            {
                if (!_executeCancellationToken.IsCancellationRequested)
                {
                    Log.Trace(_ => _("Termination raised by system."));
                    _executeCts.Cancel();
                }

                e.Cancel = true;
            };
        }
        /// <summary>
        /// Writes trace log entry.
        /// </summary>
        /// <typeparam name="T1">Log entry builder argument 1 type.</typeparam>
        /// <typeparam name="T2">Log entry builder argument 2 type.</typeparam>
        /// <param name="logger">Logger to write to.</param>
        /// <param name="arg1">Log entry builder argument 1.</param>
        /// <param name="arg2">Log entry builder argument 2.</param>
        /// <param name="logEntryBuilder">Log entry builder <c>delegate</c>.</param>
        /// <param name="callerFilePath">Log entry origin file path.</param>
        /// <param name="callerMemberName">Log entry origin member name.</param>
        /// <param name="callerLineNumber">Log entry origin line number.</param>
        public static void Trace <T1, T2>(
            this IJsonLogger logger,
            T1 arg1,
            T2 arg2,
            Func <Func <string, ILogEntryBuilder>, T1, T2, ILogEntryBuilder> logEntryBuilder,
            [CallerFilePath] string callerFilePath     = null,
            [CallerMemberName] string callerMemberName = null,
            [CallerLineNumber] int callerLineNumber    = 0)
        {
            // ReSharper disable AssignNullToNotNullAttribute
            WriteLogEntry(
                logger,
                LogSeverity.Debug,
                arg1,
                arg2,
                logEntryBuilder,
                callerFilePath,
                callerMemberName,
                callerLineNumber);

            // ReSharper restore AssignNullToNotNullAttribute
        }
Esempio n. 14
0
        // [Require(typeof(IClusterNode))]
        private LoggerWebApp(
            IIxResolver resolver,
            IWebHostBuilder webHostBuilder,
            IJsonLogger logger,
            ILogReader logReader,
            LoggerWebAppConfig config)
        {
            Log = new ClassJsonLogger <LoggerWebApp>(logger);

            Log.Info(_ => _("Starting Asp.Net core..."));
            _webHost = webHostBuilder

                       // Should be removed after adoption IndirectX to Asp.Net core.
                       .ConfigureServices(
                x => x
                .AddHttpRequestScopeService()
                .AddScopedHttpContextAccessor()
                .AddSingleton(new Tuple <IJsonLogger, IIxResolver>(Log, resolver))
                .AddSingleton <ILogReader>(logReader)
                .AddSingleton(config))
                       .UseStartup <LoggerWebAppStartup>()
                       .ConfigureJsonFormatters(JsonDefaults.RestRpcSerializerSource.Settings)
                       .Build();
            _webHost.Start();

            var addressesFeature = _webHost.ServerFeatures.Get <IServerAddressesFeature>();
            var addresses        = new HashSetEx <string>();

            foreach (string addressesFeatureAddress in addressesFeature.Addresses)
            {
                addresses.Add(addressesFeatureAddress);
                Log.Info(
                    addressesFeatureAddress,
                    (_, addr) => _($"Now listening on: {addr}").Data(new { ListenAddress = addr }));
            }

            HostingUrls = addresses;
        }
Esempio n. 15
0
 public HttpClientWithDumpingFactory(IJsonLogger logger)
 {
     _logger = logger;
 }
Esempio n. 16
0
 public DumpHandler(HttpMessageHandler inner, IJsonLogger logger)
     : base(inner)
 {
     Log = new ClassJsonLogger <DumpHandler>(logger);
 }
Esempio n. 17
0
 /// <summary>
 /// Enables request/response dumping to the provided logger.
 /// </summary>
 /// <param name="url">Flurl url.</param>
 /// <param name="logger">The logger.</param>
 /// <returns></returns>
 public static IFlurlRequest WithDump(this Url url, IJsonLogger logger)
 {
     return(new FlurlRequest(url).WithClient(
                new FlurlClient().Configure(
                    client => client.HttpClientFactory = new HttpClientWithDumpingFactory(logger))));
 }
Esempio n. 18
0
 /// <summary>
 /// Enables request/response dumping to the provided logger.
 /// </summary>
 /// <param name="flurlRequest">Flurl fluent syntax.</param>
 /// <param name="logger">The logger.</param>
 /// <returns></returns>
 public static IFlurlClient WithDump(this IFlurlClient flurlRequest, IJsonLogger logger)
 {
     return(flurlRequest.Configure(
                client => client.HttpClientFactory = new HttpClientWithDumpingFactory(logger)));
 }
Esempio n. 19
0
 /// <summary>
 /// Creates logger proxy for the provided scope id.
 /// </summary>
 /// <param name="logger">The parent logger.</param>
 /// <param name="scopeId">Scope identifier.</param>
 /// <returns>The scoped logger.</returns>
 public static IJsonLogger UseScope(this IJsonLogger logger, object scopeId)
 {
     return(new ScopedLogger(logger, scopeId));
 }
Esempio n. 20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="innerLogger"/> class.
 /// </summary>
 /// <param name="innerLogger">Inner logger.</param>
 public SerializerJsonLogger([NotNull] IJsonLogger innerLogger)
 {
     _innerLogger     = innerLogger;
     SerializerSource = innerLogger.SerializerSource;
 }
Esempio n. 21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ClassJsonLogger{T}"/> class.
 /// </summary>
 /// <param name="innerLogger">Next logger in chain.</param>
 public ClassJsonLogger(IJsonLogger innerLogger)
 {
     VxArgs.NotNull(innerLogger, nameof(innerLogger));
     _innerLogger     = innerLogger;
     SerializerSource = innerLogger.SerializerSource;
 }
Esempio n. 22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PersistenceBase{TPersistence,TUnitOfWork}"/> class.
 /// </summary>
 /// <param name="logger">Logger for persistence.</param>
 /// <remarks>
 /// Do not forget to call Initialize method as last operation in the constructor.
 /// </remarks>
 protected PersistenceBase(IJsonLogger logger)
 {
     // Do nothing.
     Log = new ClassJsonLogger <TPersistence>(logger);
 }