Example #1
0
        /// <summary>
        ///   Called when intercepting method is invoked.
        /// </summary>
        /// <param name="args">The interception arguments.</param>
        public override void OnInvoke(MethodInterceptionArgs args)
        {
            // skip all logging if it is turned off
            if (ConfigurationManager.AppSettings[Settings.Default.EnableLoggerSettingName]?.EqualIgnoreCase(false.ToString()) ??
                false)
            {
                base.OnInvoke(args);
                return;
            }

            var methodName = BuildMethodName(args.Method);

            if (_logger == null)
            {
                _logger = IoC.Resolve <ILog>();
            }

            if (LogInputParameters)
            {
                var parameters = UseJson ? LogJson(args) : LogCustom(args);

                _logger.Trace(MethodWithParameters.FormatWith(methodName, parameters));
            }
            else
            {
                _logger.Trace(methodName);
            }

            try
            {
                if (LogMeasure)
                {
                    using (TimeMeasurement.Measure(_ => LogMethodMeasure(methodName, _)))
                        base.OnInvoke(args);
                }
                else
                {
                    base.OnInvoke(args);
                }

                if (!LogOutputValue)
                {
                    return;
                }

                var output = LogArgument(args.ReturnValue);

                _logger.Trace(output);
            }
            catch (Exception exception)
            {
                _logger.Error(methodName, exception);
                throw;
            }
        }
        public ExecutionTimeLogger([NotNull] string mark)
        {
            if (mark == null)
            {
                throw new ArgumentNullException(nameof(mark));
            }

            _mark = mark;

            _log = IoC.GetContainer().Resolve <ILog>();

            _timeMeasurement = TimeMeasurement.Measure(WriteLog);
        }