Non specificamente una risposta richiesta, ma forse un modo migliore, a seconda del tuo scenario, sarebbe quello di non accedere affatto a stdout / stderr. Basta reindirizzare i registri a cat in un formato JSON. Ciò eliminerebbe la necessità di differenziare i flussi in quanto il json potrebbe disporre dei dati necessari per distinguerli. ad esempio qualcosa sulla falsariga di quanto segue. Questo può quindi essere ingerito molto più facilmente in qualcosa come graylog
GlobalLog "| cat - " gelf
ErrorLog "| cat - "
LogFormat "{ \"apache_log\": \"ACCESS\", \"app_name\": \"apache\", \"Connection\": \"%{X-Forwarded-Proto}i:%{X-Forwarded-Port}i \", \"X-Forwarded-For\": \"%{X-Forwarded-For}i\", \"version\": \"1.1\", \"vhost\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"user_agent\": \"%{User-Agent}i\", \"source_ip\": \"%a\", \"duration_usec\": %D, \"duration_sec\": %T, \"request_size_byte\": %O, \"http_status\": %s, \"http_request_path\": \"%U\", \"http_request\": \"%U%q\", \"http_method\": \"%m\", \"http_referer\": \"%{Referer}i\", \"X-Powered-By\": \"%{X-Powered-By}i\" }" gelf
ErrorLogFormat "{ \"app_name\": \"apache\", \"apache_log\": \"ERROR\", \"time\":\"%{%Y-%m-%d}tT%{%T}t.%{msec_frac}tZ\", \"function\" : \"[%-m:%l]\" , \"process\" : \" [pid %P:tid %T] \" , \"message\" : \"%M\" ,\ \"referer\"\ : \" %{Referer}i \" }"
C'è anche un modulo di registrazione gelf, quindi puoi eseguire lo streaming diretto da apache a un server di tipo graylog se lo desideri