// Private Methods (1) 

        private LogCommandExecutionContext CreateBasicExecutionContext(ILogMessage msg)
        {
            LogCommandExecutionContext result = new LogCommandExecutionContext();

            result.Arguments         = CollectionHelper.AsArray(this.GetExecutionArguments(msg)) ?? new object[0];
            result.DoLogMessage      = false;
            result.Command           = this;
            result.Message           = msg;
            result.MessageValueToLog = null;

            return(result);
        }
        // Public Methods (1) 

        /// <summary>
        ///
        /// </summary>
        /// <see cref="ILogCommand.Execute(ILogMessage)"/>
        public new ILogCommandExecutionResult Execute(ILogMessage orgMsg)
        {
            if (!this.CanExecute(orgMsg))
            {
                return(null);
            }

            LogCommandExecutionResult result = new LogCommandExecutionResult();

            result.Command = this;
            result.Message = orgMsg;

            try
            {
                LogCommandExecutionContext ctx = this.CreateBasicExecutionContext(orgMsg);

                this.OnExecute(ctx);

                result.Errors            = new Exception[0];
                result.DoLogMessage      = ctx.DoLogMessage;
                result.MessageValueToLog = ctx.MessageValueToLog;
            }
            catch (Exception ex)
            {
                AggregateException aggEx = ex as AggregateException;
                if (aggEx == null)
                {
                    aggEx = new AggregateException(new Exception[] { ex });
                }

                result.Errors = CollectionHelper.AsArray(aggEx.Flatten().InnerExceptions);

                result.DoLogMessage      = false;
                result.MessageValueToLog = null;
            }

            return(result);
        }
        /// <inheriteddoc />
        protected override sealed void OnExecute(ILogMessage param)
        {
            LogCommandExecutionContext ctx = this.CreateBasicExecutionContext(param);

            this.OnExecute(ctx);
        }