Exemple #1
0
        public void UpdateLastError(string key, string operationId)
        {
            // NO DISTRIBUTEC CACHE
            if (Cache is null)
            {
                return;
            }

            // NO CIRCUIT-BREAKER DURATION
            if (_breakDurationTicks == 0)
            {
                return;
            }

            Interlocked.Exchange(ref _gatewayTicks, DateTimeOffset.UtcNow.Ticks + _breakDurationTicks);

            // DETECT CIRCUIT STATE CHANGE
            var oldCircuitState = Interlocked.Exchange(ref _circuitState, CircuitStateOpen);

            if (oldCircuitState == CircuitStateClosed)
            {
                if (_logger?.IsEnabled(LogLevel.Warning) ?? false)
                {
                    _logger.LogWarning("FUSION (K={CacheKey} OP={CacheOperationId}): distributed cache temporarily de-activated for {BreakDuration}", key, operationId, _breakDuration);
                }
            }
        }
        private void MaybeLogWarningsAndErrors(EmitResult result)
        {
            var warnings = result.Diagnostics.Where(diagnostic =>
                                                    !diagnostic.IsSuppressed && !diagnostic.IsWarningAsError &&
                                                    diagnostic.Severity == DiagnosticSeverity.Warning);

            foreach (var warning in warnings)
            {
                if (_logger?.IsEnabled(LogLevel.Warning) == true)
                {
                    _logger?.LogWarning(JsonConvert.SerializeObject(warning));
                }
            }

            var errors = result.Diagnostics.Where(diagnostic =>
                                                  !diagnostic.IsSuppressed && diagnostic.IsWarningAsError ||
                                                  diagnostic.Severity == DiagnosticSeverity.Error);

            foreach (var error in errors)
            {
                if (_logger?.IsEnabled(LogLevel.Error) == true)
                {
                    _logger?.LogError(JsonConvert.SerializeObject(error));
                }
            }
        }
Exemple #3
0
        /// <summary>
        /// Creates a new <see cref="DataFilter"/> object using the specified exception filter and compression filter settings.
        /// </summary>
        /// <param name="name">The name for the filter.</param>
        /// <param name="exceptionSettings">The exception filter settings.  If <see langword="null"/>, a default (disabled) exception filter will be assigned to the buffer.</param>
        /// <param name="compressionSettings">The compression filter settings.  If <see langword="null"/>, a default (disabled) compression filter will be assigned to the buffer.</param>
        /// <param name="loggerFactory">The <see cref="ILoggerFactory"/> to use for logging.</param>
        public DataFilter(string name, ExceptionFilterState exceptionSettings, CompressionFilterState compressionSettings, ILoggerFactory loggerFactory)
        {
            Log            = loggerFactory?.CreateLogger <DataFilter>();
            CanLogDebug    = Log?.IsEnabled(LogLevel.Debug) ?? false;
            CanLogTraceLog = Log?.IsEnabled(LogLevel.Trace) ?? false;

            Name                = name;
            ExceptionFilter     = exceptionSettings ?? throw new ArgumentNullException(nameof(exceptionSettings));
            CompressionFilter   = compressionSettings ?? throw new ArgumentNullException(nameof(compressionSettings));
            _exceptionMonitor   = new ExceptionMonitor(this);
            _compressionMonitor = new CompressionMonitor(this);
            IsEnabled           = true;
        }
Exemple #4
0
        /// <summary>
        /// Creates a new <see cref="ApiClient"/> object with the specified base URL, credentials, and proxy settings.
        /// </summary>
        /// <param name="baseUrl">The base URL of the Aika API to query (e.g. <c>https://aika.myorg.com/aika</c>).</param>
        /// <param name="credentials">The credentials to use when querying the Aika API.</param>
        /// <param name="proxy">The proxy settings to use.</param>
        /// <param name="loggerFactory">The logger factory for the API client.  Can be <see langword="null"/>.</param>
        /// <exception cref="ArgumentNullException"><paramref name="baseUrl"/> is <see langword="null"/>.</exception>
        /// <exception cref="UriFormatException"><paramref name="baseUrl"/> is not a valid absolute URL.</exception>
        public ApiClient(string baseUrl, ICredentials credentials, IWebProxy proxy, ILoggerFactory loggerFactory) : this(loggerFactory) {
            if (baseUrl == null)
            {
                throw new ArgumentNullException(nameof(baseUrl));
            }

            if (!baseUrl.EndsWith("/"))
            {
                baseUrl = baseUrl + "/";
            }
            var uri = new Uri(baseUrl, UriKind.Absolute);

            MessageHandler             = CreateHttpMessageHandler(uri, credentials, proxy);
            MessageHandler.BeforeSend += (request, ct) => {
                if (Authorization != null && request.Headers.Authorization == null)
                {
                    request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(Authorization.Scheme, Authorization.Parameter);
                }

                if (_logger?.IsEnabled(LogLevel.Trace) ?? false)
                {
                    _logger.LogTrace($"{request.Method.ToString().ToUpperInvariant()} {request.RequestUri}");
                }

                return(Task.CompletedTask);
            };
            MessageHandler.AfterResponse += (response, duration, ct) => {
                if (_logger?.IsEnabled(LogLevel.Trace) ?? false)
                {
                    string formattedDuration;
                    if (duration < TimeSpan.FromSeconds(1))
                    {
                        formattedDuration = $"{Math.Ceiling(duration.TotalMilliseconds)} ms";
                    }
                    else
                    {
                        formattedDuration = $"{duration.TotalSeconds:0.00} s";
                    }
                    _logger.LogTrace($"{response.RequestMessage.Method.ToString().ToUpperInvariant()} {response.RequestMessage.RequestUri} {(int) response.StatusCode}/{response.ReasonPhrase ?? response.StatusCode.ToString()} {formattedDuration}");
                }

                return(Task.CompletedTask);
            };
            HttpClient = new HttpClient(MessageHandler, false)
            {
                BaseAddress = uri
            };
        }
    /// <summary>
    /// Log a stack trace at the point of caller if verbose logging is enabled.
    /// </summary>
    /// <param name="logger">The serilog logger.</param>
    /// <param name="skipFrames">Number of stack frames to ignore. This is usuful if wanting to ignore a part of the stack frame because the caller is not the important part of the stack frame.</param>
    public static void StackTrace(this ILogger logger, ushort skipFrames = 0)
    {
        if (logger?.IsEnabled(Events.LogEventLevel.Verbose) != true)
        {
            return;
        }

        System.Diagnostics.StackTrace trace = new(true);
        var indent = "";

        foreach (var frame in trace.GetFrames().Reverse().Skip(1 + skipFrames))
        {
            var filename = frame.GetFileName()?.Split('\\').Last();
            if (filename is null)
            {
                continue;
            }

            logger.Verbose(
                $"{indent}[{{Line}}] {{Method}} in {{FileName}}",
                frame.GetFileLineNumber(),
                frame.GetMethod(),
                filename);

            indent += "  ";
        }
    }
        private List <NRSpans.Span> FilterSpans(List <NRSpans.Span> spans, List <string> spanIdsToFilter)
        {
            if (spanIdsToFilter.Count == 0)
            {
                return(spans);
            }

            var newSpansToFilter = spans.Where(x => spanIdsToFilter.Contains(x.ParentId)).ToArray();

            if (newSpansToFilter.Length == 0)
            {
                return(spans);
            }

            if (_logger?.IsEnabled(LogLevel.Debug) == true)
            {
                foreach (var spanToFilter in newSpansToFilter)
                {
                    _logger?.LogDebug(null, $"The following span was filtered because it is a descendant of a span that describes communication with a New Relic endpoint: Trace={spanToFilter.TraceId}, Span={spanToFilter.Id}, ParentSpan={spanToFilter.ParentId ?? "<NULL>"}");
                }
            }

            var newSpanIdsToFilter = newSpansToFilter.Select(x => x.Id).ToArray();

            spanIdsToFilter = spanIdsToFilter.Union(newSpanIdsToFilter).ToList();

            spans = spans.Except(newSpansToFilter).ToList();

            return(FilterSpans(spans, spanIdsToFilter));
        }
Exemple #7
0
        /// <summary>
        /// Sends an API query to Ontraport and deserializes the result into an object.
        /// </summary>
        /// <typeparam name="T">The expected response data type. Set to JsonElement to parse manually. Set to Object to discard output.</typeparam>
        /// <param name="endpoint">The URL endpoint, excluding that goes after https://api.ontraport.com/1/ </param>
        /// <param name="method">The web request method.</param>
        /// <param name="encodeJson">True to encode the request as Json, false to encode as URL query.</param>
        /// <param name="values">Values set by the method type.</param>
        /// <param name="returnNotFoundAsNull">If true, response code 404 will be returned as null instead of an exception.</param>
        /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
        /// <returns>An ApiResponse of the expected type.</returns>
        /// <exception cref="InvalidOperationException">There was an error while sending or parsing the request.</exception>
        /// <exception cref="HttpRequestException">There was an HTTP communication error or Ontraport returned an error.</exception>
        /// <exception cref="TaskCanceledException">The request timed-out or the user canceled the request's Task.</exception>
        protected async Task <T?> RequestAsync <T>(string endpoint, HttpMethod method, bool encodeJson, IDictionary <string, object?>?values = null, bool returnNotFoundAsNull = false, CancellationToken cancellationToken = default)
            where T : class
        {
            using var response = await SendRequestAsync(endpoint, method, encodeJson, values, returnNotFoundAsNull, cancellationToken).ConfigureAwait(false);

            if (response == null)
            {
                return(null);
            }
            using var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

            // Log response.
            if (_logger?.IsEnabled(LogLevel.Trace) == true)
            {
                using var logReader = new StreamReader(responseStream, Encoding.UTF8, true, 512, true);
                var logMsg = logReader.ReadToEnd();
                _logger?.LogInformation(logMsg);
                responseStream.Seek(0, SeekOrigin.Begin);
            }

            if (typeof(T) == typeof(object))
            {
                return((T?)null);
            }
            else
            {
                // Parse response.
                try
                {
                    var result = await JsonSerializer.DeserializeAsync <ApiResponse <T> >(responseStream, OntraportSerializerOptions.Default, CancellationToken.None).ConfigureAwait(false);

                    if (result.Code != 0)
                    {
                        throw new InvalidOperationException(Res.ResponseErrorCode.FormatInvariant(result.Code));
                    }
                    if (result.Data == null)
                    {
                        throw new InvalidOperationException(Res.InvalidResponseData);
                    }
                    return(result.Data !);
                }
                catch (JsonException ex)
                {
                    throw new InvalidOperationException(Res.InvalidResponseData, ex);
                }
            }
        }
 public DefaultTypeConvertibleService(IEnumerable<ITypeConvertibleProvider> providers, ILogger<DefaultTypeConvertibleService> logger)
 {
     _logger = logger;
     providers = providers.ToArray();
     if (_logger.IsEnabled(LogLevel.Debug))
         _logger.Debug($"发现了以下类型转换提供程序:{string.Join(",", providers.Select(p => p.ToString()))}。");
     _converters = providers.SelectMany(p => p.GetConverters()).ToArray();
 }
        // ACQUIRE LOCK
        public object?AcquireLock(string key, string operationId, TimeSpan timeout, ILogger?logger)
        {
            var semaphore = GetSemaphore(key, operationId, logger);

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): waiting to acquire the LOCK", key, operationId);
            }

            var acquired = semaphore.Wait(timeout);

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): LOCK acquired", key, operationId);
            }

            return(acquired ? semaphore : null);
        }
Exemple #10
0
        public static void LogError(this ILogger logger, FlowContext flowContext, Exception exception, string messageTemplate, params object[] args)
        {
            if (logger?.IsEnabled(LogLevel.Error) != true)
            {
                return;
            }

            var argList = GetBaseArgList(flowContext, args);

            logger.LogError(exception, FlowContextTemplate + messageTemplate, argList.ToArray());
        }
        // ACQUIRE LOCK ASYNC
        public async Task <object?> AcquireLockAsync(string key, string operationId, TimeSpan timeout, ILogger?logger, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var semaphore = GetSemaphore(key, operationId, logger);

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): waiting to acquire the LOCK", key, operationId);
            }

            var acquired = await semaphore.WaitAsync(timeout, token).ConfigureAwait(false);

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): LOCK acquired", key, operationId);
            }

            return(acquired ? semaphore : null);
        }
 private void LogError(HttpContextBase context, SecurityResult error)
 {
     _logger?.LogError("Actuator Security Error: {ErrorCode} - {ErrorMessage}", error.Code, error.Message);
     if (_logger?.IsEnabled(LogLevel.Trace) == true)
     {
         foreach (var header in context.Request.Headers.AllKeys)
         {
             _logger?.LogTrace("Header: {HeaderKey} - {HeaderValue}", header, context.Request.Headers[header]);
         }
     }
 }
Exemple #13
0
        public MeshPrimitive GenerateTriangleMesh(IEnumerable <GeoPoint> points, List <int> indices, IEnumerable <Vector4> colors = null, PBRTexture texture = null)
        {
            Stopwatch sw = null;

            if ((_logger?.IsEnabled(LogLevel.Trace)).GetValueOrDefault(false))
            {
                sw = Stopwatch.StartNew();
                _logger.LogTrace("Baking points...");
            }

            var           pointsList = points.ToVector3().ToList();
            MeshPrimitive mesh       = GenerateTriangleMesh(pointsList, indices, colors, texture);

            if ((_logger?.IsEnabled(LogLevel.Trace)).GetValueOrDefault(false))
            {
                sw.Stop();
                _logger.LogTrace($"Baking points done in {sw.Elapsed:g}");
            }

            return(mesh);
        }
        private static void FilteredLog(ILogger logger, LogLevel level, string message, Exception exception = null, Customer customer = null)
        {
            //don't log thread abort exception
            if (exception is System.Threading.ThreadAbortException)
                return;

            if (logger.IsEnabled(level))
            {
                string fullMessage = exception == null ? string.Empty : exception.ToString();
                logger.InsertLog(level, message, fullMessage, customer);
            }
        }
        public static void AddOrUpdateIdentifiedItem <TApi, TStore>(
            this DbSet <TStore> dbSet,
            TApi data,
            DateTime lastObservedUtc,
            ILogger logger
            )
            where TApi : IdentifiedItem
            where TStore : IdentifiedStoreItem
        {
            if (dbSet == null)
            {
                throw new ArgumentNullException(nameof(dbSet));
            }
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            var storeItem = dbSet.FirstOrDefault(si => si.Id == data.Id);

            if (storeItem != null)
            {
                // Update an existing entry
                if (logger?.IsEnabled(LogLevel.Trace) == true)
                {
                    logger.LogTrace($"Updating existing {typeof(TStore).Name} with id {storeItem.Id} ({storeItem.DatamartId})");
                }
                // Map from data onto the existing storeItem which EF internal tracker will work out whether anything changed
                storeItem = DatamartClient.MapperInstance.Map(data, storeItem);
                storeItem.DatamartLastObservedUtc = lastObservedUtc;
                return;
            }
            if (logger?.IsEnabled(LogLevel.Trace) == true)
            {
                logger.LogTrace($"Adding new {typeof(TStore).Name} with id {data.Id}");
            }

            // Add a new entry
            dbSet.Add(DatamartClient.MapperInstance.Map <TApi, TStore>(data));
        }
Exemple #16
0
 /// <summary>
 /// Initializes a new instance.
 /// </summary>
 /// <param name="jsRuntime">The <see cref="IJSRuntime"/> to use for performing JavaScript interop operations.</param>
 /// <param name="options">The options to be passed down to the underlying JavaScript library handling the authentication operations.</param>
 /// <param name="navigation">The <see cref="NavigationManager"/> used to generate URLs.</param>
 /// <param name="accountClaimsPrincipalFactory">The <see cref="AccountClaimsPrincipalFactory{TAccount}"/> used to generate the <see cref="ClaimsPrincipal"/> for the user.</param>
 /// <param name="logger">The logger to use for login authentication operations.</param>
 public RemoteAuthenticationService(
     IJSRuntime jsRuntime,
     IOptionsSnapshot <RemoteAuthenticationOptions <TProviderOptions> > options,
     NavigationManager navigation,
     AccountClaimsPrincipalFactory <TAccount> accountClaimsPrincipalFactory,
     ILogger <RemoteAuthenticationService <TRemoteAuthenticationState, TAccount, TProviderOptions> > logger)
 {
     JsRuntime  = jsRuntime;
     Navigation = navigation;
     AccountClaimsPrincipalFactory = accountClaimsPrincipalFactory;
     Options         = options.Value;
     _loggingOptions = new JavaScriptLoggingOptions(logger?.IsEnabled(LogLevel.Debug) ?? false, logger?.IsEnabled(LogLevel.Trace) ?? false);
 }
        public static void LogContentType(this ILogger logger, IHeaderDictionary requestHeaders, string contentType)
        {
            logger?.LogTrace("setting contentType to {0}", contentType);
            var logTrace = logger?.IsEnabled(LogLevel.Trace);

            if (logTrace.GetValueOrDefault())
            {
                foreach (var header in requestHeaders)
                {
                    logger.LogTrace("Header: {0} - {1}", header.Key, header.Value);
                }
            }
        }
        public void SetEntry <TValue>(string operationId, string key, FusionCacheMemoryEntry entry, FusionCacheEntryOptions options)
        {
            var memoryOptions = options.ToMemoryCacheEntryOptions();

            options.MemoryOptionsModifier?.Invoke(memoryOptions, entry.GetValue <TValue>());

            if (_logger?.IsEnabled(LogLevel.Debug) ?? false)
            {
                _logger.LogDebug("FUSION (K={CacheKey} OP={CacheOperationId}): saving entry in memory {Options} {Entry}", key, operationId, memoryOptions.ToLogString(), entry.ToLogString());
            }

            _cache.Set <FusionCacheMemoryEntry>(key, entry, memoryOptions);
        }
Exemple #19
0
        /// <summary>
        /// Used to retrieve the final log level setting. This is a "runtime" setting that is checking the result AFTER
        /// accounting for launchSettings, appSettings, and environment variable settings.
        /// </summary>
        /// <param name="level">A log level. If that level is enabled, returns true. False otherwise.</param>
        /// <returns></returns>
        public static bool CheckLogLevel(LogLevel level)
        {
            var result = logger?.IsEnabled(LogLevel.Debug);

            if (result.HasValue)
            {
                return(result.Value);
            }
            else
            {
                return(false);
            }
        }
        private static void FilteredLog(ILogger logger, LogLevel level, string message, Exception exception = null,
            User user = null)
        {
            //No se guarda el registro cuando es de un hilo de una excepcion de abort
            if (exception is ThreadAbortException)
                return;

            if (logger.IsEnabled(level))
            {
                var fullMessage = exception == null ? string.Empty : exception.ToString();
                logger.InsertLog(level, message, fullMessage, user);
            }
        }
        // ACQUIRE LOCK ASYNC
        public async Task <object?> AcquireLockAsync(string key, string operationId, TimeSpan timeout, ILogger?logger, CancellationToken token)
        {
            token.ThrowIfCancellationRequested();

            var idx       = GetLockIndex(key);
            var semaphore = _lockPool[idx];

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): trying to fast-acquire the LOCK", key, operationId);
            }

            var acquired = semaphore.Wait(0);

            if (acquired)
            {
                _lockPoolKeys[idx] = key;
                if (logger?.IsEnabled(LogLevel.Trace) ?? false)
                {
                    logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): LOCK fast-acquired", key, operationId);
                }

                return(semaphore);
            }

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): LOCK already taken", key, operationId);
            }

            var key2 = _lockPoolKeys[idx];

            if (key2 != key)
            {
                if (logger?.IsEnabled(LogLevel.Trace) ?? false)
                {
                    logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): LOCK " + (key2 is null ? "maybe " : string.Empty) + "acquired for a different key (current key: " + key + ", other key: " + key2 + ")", key, operationId);
                }

                Interlocked.Increment(ref _lockPoolCollisions);
            }

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): waiting to acquire the LOCK", key, operationId);
            }

            acquired = await semaphore.WaitAsync(timeout, token).ConfigureAwait(false);

            _lockPoolKeys[idx] = key;

            if (logger?.IsEnabled(LogLevel.Trace) ?? false)
            {
                logger.LogTrace("FUSION (K={CacheKey} OP={CacheOperationId}): LOCK acquired", key, operationId);
            }

            return(acquired ? semaphore : null);
        }
Exemple #22
0
        /// <summary> Unregister specified interceptor type
        /// </summary>
        /// <param name="interceptorType">interceptor type</param>
        /// <param name="logger">logger</param>
        /// <returns>true if interceptor was previously registered</returns>
        public bool Unregister(Type interceptorType, ILogger logger = null)
        {
            if (null == interceptorType)
            {
                throw new ArgumentNullException("interceptorType");
            }
            string key = GetKey(interceptorType);
            bool   res = _interceptors.Remove(key);

            if (res && logger?.IsEnabled(LogLevel.Information) == true)
            {
                logger.LogInformation($"Unregister interceptor: {key}");
            }
            return(res);
        }
Exemple #23
0
        protected string GetErrorJson(object responseObject, ILogger logger)
        {
            if (responseObject is ErrorCollection errorCollection)
            {
                return(errorCollection.GetJson());
            }
            else
            {
                if (logger?.IsEnabled(LogLevel.Information) == true)
                {
                    logger.LogInformation("Response was not a JSONAPI entity. Serializing as plain JSON.");
                }

                return(JsonConvert.SerializeObject(responseObject));
            }
        }
        public async ValueTask <SkillRequest> ParseHttpRequestAsync(HttpRequest httpRequest)
        {
            if (httpRequest.ContentLength == null || httpRequest.ContentLength <= 0)
            {
                throw new InvalidDataException("Request body is missing.");
            }

            if (httpRequest.ContentLength > ContentLengthLimit)
            {
                throw new InvalidDataException("Request body is too large.");
            }

            if (string.IsNullOrEmpty(_skillionConfiguration.SkillId) &&
                _skillionConfiguration.AlwaysValidateSkillRequest)
            {
                throw new Exception(
                          "Unable to process request. Always validate skill id is true and skill id is missing");
            }

            var rawJsonRequest = await ParseBodyToRequestAsync(httpRequest.Body);

            if (_logger?.IsEnabled(LogLevel.Debug) ?? false)
            {
                _logger?.LogDebug(rawJsonRequest.ToString(Formatting.Indented));
            }

            var skill = rawJsonRequest.ToObject <SkillRequest>();

            if (_webHostEnvironment.IsDevelopment() && !_skillionConfiguration.AlwaysValidateSkillRequest)
            {
                return(skill);
            }

            if (skill.Context.System.Application.ApplicationId != _skillionConfiguration.SkillId)
            {
                throw new Exception("Invalid application id.");
            }

            if (!await IsValidRequestAsync(httpRequest, skill, rawJsonRequest.ToString(Formatting.None)))
            {
                throw new Exception("Invalid request. Check timestamp or signature.");
            }

            return(skill);
        }
 private static void FilteredLog(ILogger logger, LogLevel level, string message,
     Exception exception = null, Customer customer = null, bool stopException = true)
 {
     // không log thông điệp khi ngoại lệ là ThreadAbortException
     if (exception is ThreadAbortException) return;
     try
     {
         if (logger.IsEnabled(level)) // nếu cho phép ghi log với kiểu level
         {
             string fullMessage = exception == null ? string.Empty : exception.ToString();
             logger.InsertLog(level, message, fullMessage, customer);
         }
     }
     catch (Exception)
     {
         if (!stopException) throw;
     }
 }
Exemple #26
0
        public IEnumerable <TdsToken> GetResponse()
        {
            var tokens = GetResponseStream().ToList();

            if (_logger?.IsEnabled(LogLevel.Debug) ?? false)
            {
                var s = new StringBuilder();
                s.AppendLine($"Read response with {tokens.Count} tokens:");
                foreach (var t in tokens)
                {
                    s.AppendLine(t.ToShortString());
                }

                _logger.LogDebug(s.ToString());
            }

            return(tokens);
        }
        public static bool TryReadCustomAuthorization(
            this MessageReceivedContext context,
            JwtBearerOptions options,
            TetraPakApiAuthConfig authConfig,
            ILogger logger,
            out string authorization)
        {
            using (logger?.BeginScope($"Looking for authorization in header: {authConfig.AuthorizationHeader}"))
            {
                if (!authConfig.IsCustomAuthorizationHeader)
                {
                    logger.Debug("Default authorization header is in use");
                    authorization = null;
                    return(false);
                }

                authorization = context.Request.Headers[authConfig.AuthorizationHeader];
                var isTokenAvailable = !string.IsNullOrWhiteSpace(authorization);
                var isJwtToken       = authorization.TryParseToJwtSecurityToken(out var jwt);

                if (!logger?.IsEnabled(LogLevel.Debug) ?? false)
                {
                    return(isTokenAvailable);
                }

                logger.Debug($"Received message: {context.Request.Path.Value}");
                if (!isTokenAvailable)
                {
                    logger.Debug("No authorization found");
                    return(false);
                }

                if (isJwtToken)
                {
                    logger.Debug($"Received JWT: \n{jwt.ToDebugString()}");
                    logger.Debug($"Environment: {authConfig.Environment}");
                    logger.Debug($"Discovery document URL: {options.MetadataAddress}");
                    return(true);
                }

                logger.Debug($"Received token: \n{authorization}");
                return(true);
            }
        }
Exemple #28
0
        /// <summary> Register specified interceptor
        /// </summary>
        /// <param name="interceptor">interceptor</param>
        /// <param name="logger">logger</param>
        /// <exception cref="ArgumentException">
        /// Specified interceptor already registered
        /// </exception>
        public void Register(global::NHibernate.IInterceptor interceptor, ILogger logger = null)
        {
            if (null == interceptor)
            {
                throw new ArgumentNullException("interceptor");
            }
            UnregisterDefault();
            try {
                string key = GetKey(interceptor);
                _interceptors.Add(key, interceptor);

                if (logger?.IsEnabled(LogLevel.Information) == true)
                {
                    logger.LogInformation($"Register interceptor: {key}");
                }
            } finally {
                RegisterDefault();
            }
        }
 protected SubscriptionService(
     StreamStoreBase streamStoreClient,
     string subscriptionName,
     ICheckpointStore checkpointStore,
     IJsonEventSerializer eventSerializer,
     IEnumerable <IEventHandler> projections,
     ILoggerFactory?loggerFactory = null,
     ProjectionGapMeasure?measure = null
     )
 {
     StreamStoreClient = streamStoreClient;
     _checkpointStore  = checkpointStore;
     _eventSerializer  = eventSerializer;
     _subscriptionName = subscriptionName;
     _measure          = measure;
     _projections      = projections.Where(x => x.SubscriptionGroup == subscriptionName).ToArray();
     _log      = loggerFactory?.CreateLogger($"StreamSubscription-{subscriptionName}");
     _debugLog = _log?.IsEnabled(LogLevel.Debug) == true ? _log.LogDebug : null;
 }
        // RELEASE LOCK ASYNC
        public void ReleaseLock(string key, string operationId, object?lockObj, ILogger?logger)
        {
            if (lockObj is null)
            {
                return;
            }

            try
            {
                ((SemaphoreSlim)lockObj).Release();
            }
            catch (Exception exc)
            {
                if (logger?.IsEnabled(LogLevel.Warning) ?? false)
                {
                    logger.LogWarning(exc, "FUSION (K={CacheKey} OP={CacheOperationId}): an error occurred while trying to release a SemaphoreSlim in the reactor", key, operationId);
                }
            }
        }
Exemple #31
0
        /// <inheritdoc/>
        public IFusionCache SetupDistributedCache(IDistributedCache distributedCache, IFusionCacheSerializer serializer)
        {
            if (distributedCache is null)
            {
                throw new ArgumentNullException(nameof(distributedCache));
            }

            if (serializer is null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            _dca = new DistributedCacheAccessor(distributedCache, serializer, _options, _logger);

            if (_logger?.IsEnabled(LogLevel.Debug) ?? false)
            {
                _logger.LogDebug("FUSION: setup distributed cache (CACHE={DistributedCacheType} SERIALIZER={SerializerType})", distributedCache.GetType().FullName, serializer.GetType().FullName);
            }

            return(this);
        }
Exemple #32
0
        private byte[] SerializeTraces(RootSpan trace)
        {
            if (_logger?.IsEnabled(LogLevel.Debug) ?? false)
            {
                using (var writer = new StringWriter())
                {
                    Serializer.Serialize(writer, new[] { trace.Spans });
                    writer.Flush();
                    _logger?.LogDebug("Preparing to put {SpanJson}", writer.ToString());
                }
            }

            using (var ms = new MemoryStream())
                using (var writer = new StreamWriter(ms, Encoding))
                {
                    Serializer.Serialize(writer, new[] { trace.Spans });
                    writer.Flush();
                    return(ms.ToArray());
                }
        }
        public PublishConfirmableChannel(IModel channel, TimeSpan?confirmTimeout = null, ILogger?logger = null)
        {
            _channel        = channel ?? throw new ArgumentNullException(nameof(channel));
            _confirmTimeout = confirmTimeout ?? TimeSpan.FromSeconds(10);

            if (_channel.IsClosed)
            {
                throw new InvalidOperationException("Channel already closed!");
            }

            _channel.ConfirmSelect();

            _channel.ModelShutdown += OnModelShutdown;
            _channel.BasicAcks     += OnBasicAcks;
            _channel.BasicNacks    += OnBasicNacks;
            _channel.BasicReturn   += OnBasicReturn;
            _logger          = logger;
            _publishTasks    = new ConcurrentDictionary <ulong, PublishTaskInfo>();
            _logTraceEnabled = logger?.IsEnabled(LogLevel.Trace) ?? false;
        }
        protected SubscriptionService(
            EventStoreClient           eventStoreClient,
            string                     subscriptionId,
            ICheckpointStore           checkpointStore,
            IEventSerializer           eventSerializer,
            IEnumerable<IEventHandler> eventHandlers,
            ILoggerFactory?            loggerFactory = null,
            SubscriptionGapMeasure?    measure       = null
        ) {
            EventStoreClient = eventStoreClient;
            _checkpointStore = checkpointStore;
            _eventSerializer = eventSerializer;
            _subscriptionId  = subscriptionId;
            _measure         = measure;

            _projections = eventHandlers.Where(x => x.SubscriptionId == subscriptionId).ToArray();

            _log = loggerFactory?.CreateLogger($"StreamSubscription-{subscriptionId}");

            _debugLog = _log?.IsEnabled(LogLevel.Debug) == true ? _log.LogDebug : null;
        }
 private static void FilteredLog(ILogger logger, LogLevel level, Exception exception, string format, object[] objects) {
     if (logger.IsEnabled(level)) {
         logger.Log(level, exception, format, objects);
     }
 }
        public override async Task ExecuteAsync(
            IRelationalConnection connection,
            ILogger logger,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(logger, nameof(logger));

            var commandText = GetCommandText();

            using (var storeCommand = CreateStoreCommand(commandText, connection))
            {
                if (logger.IsEnabled(LogLevel.Verbose))
                {
                    logger.LogCommand(storeCommand);
                }

                try
                {
                    using (var reader = await storeCommand.ExecuteReaderAsync(cancellationToken))
                    {
                        await ConsumeAsync(reader, cancellationToken);
                    }
                }
                catch (DbUpdateException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new DbUpdateException(RelationalStrings.UpdateStoreException, ex);
                }
            }
        }
        public override async Task<int> ExecuteAsync(
            RelationalTransaction transaction,
            RelationalTypeMapper typeMapper,
            DbContext context,
            ILogger logger,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Check.NotNull(transaction, nameof(transaction));
            Check.NotNull(typeMapper, nameof(typeMapper));
            Check.NotNull(context, nameof(context));
            Check.NotNull(logger, nameof(logger));

            var commandText = GetCommandText();

            Debug.Assert(ResultSetEnds.Count == ModificationCommands.Count);

            var commandIndex = 0;
            using (var storeCommand = CreateStoreCommand(commandText, transaction.DbTransaction, typeMapper, transaction.Connection?.CommandTimeout))
            {
                if (logger.IsEnabled(LogLevel.Verbose))
                {
                    logger.LogCommand(storeCommand);
                }

                try
                {
                    using (var reader = await storeCommand.ExecuteReaderAsync(cancellationToken).WithCurrentCulture())
                    {
                        var actualResultSetCount = 0;
                        do
                        {
                            commandIndex = ModificationCommands[commandIndex].RequiresResultPropagation
                                ? await ConsumeResultSetWithPropagationAsync(commandIndex, reader, context, cancellationToken)
                                    .WithCurrentCulture()
                                : await ConsumeResultSetWithoutPropagationAsync(commandIndex, reader, context, cancellationToken)
                                    .WithCurrentCulture();
                            actualResultSetCount++;
                        }
                        while (commandIndex < ResultSetEnds.Count
                               && await reader.NextResultAsync(cancellationToken).WithCurrentCulture());

                        Debug.Assert(commandIndex == ModificationCommands.Count, "Expected " + ModificationCommands.Count + " results, got " + commandIndex);
#if DEBUG
                        var expectedResultSetCount = 1 + ResultSetEnds.Count(e => e);
                        expectedResultSetCount += ResultSetEnds[ResultSetEnds.Count - 1] ? -1 : 0;

                        Debug.Assert(actualResultSetCount == expectedResultSetCount, "Expected " + expectedResultSetCount + " result sets, got " + actualResultSetCount);
#endif
                    }
                }
                catch (DbUpdateException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new DbUpdateException(
                        Strings.UpdateStoreException,
                        context,
                        ex,
                        commandIndex < ModificationCommands.Count ? ModificationCommands[commandIndex].Entries : new InternalEntityEntry[0]);
                }
            }

            return commandIndex;
        }
 private static bool IsLogLevelEnabledCore(ILogger logger, LogLevel level)
 {
     return (logger != null && logger.IsEnabled(level));
 }
        public override void Execute(
            IRelationalConnection connection,
            ILogger logger)
        {
            Check.NotNull(connection, nameof(connection));
            Check.NotNull(logger, nameof(logger));

            var commandText = GetCommandText();

            using (var storeCommand = CreateStoreCommand(commandText, connection))
            {
                if (logger.IsEnabled(LogLevel.Verbose))
                {
                    logger.LogCommand(storeCommand);
                }

                try
                {
                    using (var reader = storeCommand.ExecuteReader())
                    {
                        Consume(reader);
                    }
                }
                catch (DbUpdateException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new DbUpdateException(RelationalStrings.UpdateStoreException, ex);
                }
            }
        }
 private static void FilteredLog(ILogger logger, LogLevel level, string category, string format, object[] objects)
 {
     if (logger.IsEnabled(level))
     {
         logger.Log(level, category, format, objects);
     }
 }
 private static void FilteredLog(ILogger logger, LogLevel level, Exception exception, Func<string> message)
 {
     if (logger.IsEnabled(level))
         logger.Log(level, exception, message == null ? null : message());
 }