Es wird nicht speziell nach einer Antwort gefragt, aber je nach Szenario ist es möglicherweise besser, sich überhaupt nicht bei stdout / stderr anzumelden. Leiten Sie die Protokolle einfach im JSON-Format an cat weiter. Dies würde die Notwendigkeit beseitigen, die Streams zu unterscheiden, da der JSON die Daten enthalten könnte, die zur Unterscheidung benötigt werden. zB etwas in der folgenden Richtung. Dies kann dann viel einfacher in so etwas wie Graylog aufgenommen werden
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 \" }"
Es gibt auch ein gelf-Protokollierungsmodul, sodass Sie auf Wunsch auch direkt von Apache auf einen Graylog-Server streamen können