/// <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); }