コード例 #1
0
ファイル: LoggingProxy.cs プロジェクト: dev-11/aop_logging
        protected override object Invoke(MethodInfo targetMethod, object[] args)
        {
            var className  = _decorated.GetType().FullName;
            var methodName = targetMethod.Name;
            var returnType = targetMethod.ReturnType;

            try
            {
                _logger.Log(_logEntryBuilder.BuildInvocationLogEntry(className, methodName, args));

                var result = targetMethod.Invoke(_decorated, args);

                _logger.Log(_logEntryBuilder.BuildLeavingLogEntry(className, methodName, args, returnType, result));

                return(result);
            }
            catch (Exception ex) when(ex is TargetInvocationException)
            {
                var innerException = ex.InnerException ?? ex;

                _logger.Log(_logEntryBuilder.BuildExceptionLogEntry(className, methodName, args, innerException));

                throw innerException;
            }
        }