There is no option available on an Execute Process Task that will redirect the output when it fails and bring that back out in logging.
To accomplish that you will need to:
- Defined a variable to capture the output
- Set that in the StandardOutputVariable option on the Execute Process Task
- Under the event handler for that task, create an "OnTaskFailed" event handler and use a script task to return back out the output
Example:
String variable called "User::exe_output" which is then added the StandardOutputVariable on the Execute Process Task:

The documentation states:
StandardOutputVariable Select a variable to capture the output of the
process, or click to create a new variable.
Then under event handler:
- Add an "OnTaskFailed" event on the Execute Process Task
- Add a script task

Open the script task and add the "User::exe_output" variable as ReadOnlyVaraibles:

Edit the script and add the following code:
public void Main()
{
//Just assigning the exe_output to a local variable
string exe_error = Dts.Variables["User::exe_output"].Value.ToString();
//Checking it its blank
if (exe_error != "")
{
//This brings back out whatever was captured in the output of the execute process task.
//Depending on how you want it logged, warning or an error, either one will log the output.
//Dts.Events.FireError(-1, "Execute Process Task Error", exe_error, String.Empty, 0);
Dts.Events.FireWarning(-1, "Execute Process Task Error", exe_error, String.Empty, 0);
}
Dts.TaskResult = (int)ScriptResults.Success;
}
Then when the process runs and fails you still get the original message, but now you also get what was captured from the output of the Execute Process Task:

In my example I was just trying to copy a file that didn't exist.