ไม่ใช่คำตอบที่ถามมาโดยเฉพาะ แต่อาจเป็นวิธีที่ดีกว่าขึ้นอยู่กับสถานการณ์ของคุณคือการไม่เข้าสู่ระบบไปยัง stdout / stderr เลย เพียงไพพ์ล็อกเพื่อ cat ในรูปแบบ JSON สิ่งนี้จะลบความจำเป็นในการแยกความแตกต่างของกระแสข้อมูลเนื่องจาก json อาจมีข้อมูลที่จำเป็นในการแยกแยะความแตกต่าง เช่นบางสิ่งบางอย่างตามสายของต่อไปนี้ สิ่งนี้สามารถถูกกลืนเข้าไปในสิ่งที่คล้ายกับ 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 \" }"
นอกจากนี้ยังมีโมดูลการบันทึก gelf ดังนั้นคุณสามารถสตรีมโดยตรงจาก apache ไปยังเซิร์ฟเวอร์ประเภท graylog เช่นกันหากคุณต้องการ