コード例 #1
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);
        }
コード例 #2
0
        /// <summary>
        /// Adds <c>data</c> to the json entry.
        /// </summary>
        /// <param name="builder">Entry <c>builder</c>.</param>
        /// <param name="data">Object with <c>data</c>.</param>
        /// <returns>The same <c>builder</c> for fluent syntax.</returns>
        public static ILogEntryBuilder Data(this ILogEntryBuilder builder, object data)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

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

            return(new DelegateLogEntryBuilderForLogEntry(
                       builder,
                       e =>
            {
                try
                {
                    JObject jsonData = JObject.FromObject(data, builder.SerializerSource.Serializer);
                    foreach (JProperty jProperty in jsonData.Properties())
                    {
                        e.SetExtensionData(jProperty.Name, jProperty.Value);
                    }
                }
                catch (Exception ex) when(ex.IsProcessable())
                {
                    // TODO: Dump exception.
                    e.SetExtensionData("DataSerializationError", ex.ToString());
                }

                return e;
            }));
        }
コード例 #3
0
ファイル: LoggingProxy.cs プロジェクト: dev-11/aop_logging
        public static T Create(T decorated, ILogger logger, ILogEntryBuilder logEntryBuilder)
        {
            object proxy = Create <T, LoggingProxy <T> >();

            ((LoggingProxy <T>)proxy).SetParameters(decorated, logger, logEntryBuilder);

            return((T)proxy);
        }
コード例 #4
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);
        }
コード例 #5
0
ファイル: LoggingProxy.cs プロジェクト: dev-11/aop_logging
        private void SetParameters(T decorated, ILogger logger, ILogEntryBuilder logEntryBuilder)
        {
            if (decorated == null)
            {
                throw new ArgumentNullException(nameof(decorated));
            }

            _decorated = decorated;

            _logger          = logger ?? throw new ArgumentNullException(nameof(logger));
            _logEntryBuilder = logEntryBuilder ?? throw new ArgumentNullException(nameof(logEntryBuilder));
        }
コード例 #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DelegateLogEntryBuilderForLogEntry"/> class.
        /// </summary>
        /// <param name="innerBuilder">Previous build block in a fluent chain.</param>
        /// <param name="buildDelegate">Delegate that performs build.</param>
        public DelegateLogEntryBuilderForLogEntry(ILogEntryBuilder innerBuilder, Func <LogEntry, LogEntry> buildDelegate)
        {
            if (innerBuilder == null)
            {
                throw new ArgumentNullException(nameof(innerBuilder));
            }

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

            _innerBuilder    = innerBuilder;
            _buildDelegate   = buildDelegate;
            SerializerSource = innerBuilder.SerializerSource;
        }
コード例 #7
0
        /// <summary>
        /// Adds <c>exception</c> dump to the json entry.
        /// </summary>
        /// <param name="builder">Entry <c>builder</c>.</param>
        /// <param name="exception">Exception to log.</param>
        /// <returns>The same <c>builder</c> for fluent syntax.</returns>
        public static ILogEntryBuilder Exception(this ILogEntryBuilder builder, Exception exception)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

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

            var exceptionDump = new JsonExceptionDumper().Dump <ExceptionDto>(exception);

            return(new DelegateLogEntryBuilderForLogEntry(
                       builder,
                       e =>
            {
                e.Exception = exceptionDump;
                return e;
            }));
        }
コード例 #8
0
        /// <summary>
        /// Adds <c>details</c> text to a log entry.
        /// </summary>
        /// <param name="builder">Log entry <c>builder</c>.</param>
        /// <param name="details">Details text.</param>
        /// <returns>Updated <c>builder</c>.</returns>
        public static ILogEntryBuilder Details(this ILogEntryBuilder builder, [NotNull] string details)
        {
            if (details == null)
            {
                throw new ArgumentNullException(nameof(details));
            }

            return(new DelegateLogEntryBuilderForLogEntry(
                       builder,
                       e =>
            {
                if (string.IsNullOrWhiteSpace(e.Details))
                {
                    e.Details = details;
                }
                else
                {
                    e.Details = $"{e.Details}{Environment.NewLine}{details}";
                }

                return e;
            }));
        }