Interesting responses. I've always hesitated to use stderr as a way to write output to the user while preserving stdout so data can be easily digested by other *nix tools, not sure why.
Good points about not trying to constantly process text if i can better represent the data as another data structure. I'll keep this in mind when i know my output is going to another one of my own programs instead of generic unix tools.
A coworker also recommended using  and () marks and tabbing inside my human output to help delineate between errors [!] additional info [+] the next operation [.] etc. While wrapping useful information in ().
[!] Error: Failed to find cache at (/path/to/file)
Hopefully sticking this output to stderr in all my programs would allow me to add in quiet flags and log path flags, then if all my logs are the same format i can write a log parser.
Thanks for the suggestions everyone.