The preexec output can be unintentionally redirected, unless you have your preexec write to /dev/tty (or perhaps better, to $(tty)) - which
reduces portability a bit. This is an example of what you don't want to see:
$ for i in $(seq 5); do echo $i; done > t
above cmd output done 2016 Mon Oct 03 07:57:25 PM PDT
dstromberg@zareason2:/tmp x86_64-pc-linux-gnu 13900
$ egrep -n . t
cmd output started 2016 Mon Oct 03 07:57:30 PM PDT
1:[m[7mcmd output started 2016 Mon Oct 03 07:57:25 PM PDT[m[27m
2:1
3:2
4:3
5:4
6:5