I do agree that the 12factor approach should focus on the general developer experience. Web development is quite different from traditional POSIX. Web applications do not log user-visible output to the console; only debugging data is sent via HTTP requests served by the server.
We have outgrown this split by using modern libraries that split by multiple factors, such as log levels and filters. If we allow for two logging streams with vastly different formats of output, it makes it difficult for logging to be processed and sent, and can even break logging entirely. POSIX's definition of logs ended where the STDERR stream did. In the modern world, there are multiple hops between web applications and developers:
- Docker container/K8s pod
- Log collector/sidecar
- Log processor and metadata extender
- Logs storage engine
- Logs search engine
It's helpful if we keep the log format the same and output in one place. Otherwise, decisions have to be made:
Is STDERR automatically an error stream or just an "everything stream" that contains errors, debugging, garbage collectors debug output, Nginx logs, etc.?
Is STDERR worthy of parsing at all if it can include debugging data that is not application-related (like JAVA GC logs)?
Should we send the stream name to the logging system or just merge these two together? (like K8s does)
What do we do if logs don't match the structured logging format in STDERR? Convert them to JSON to make them safe to process? Discard them fully?
If STDERR is a debug output, what is STDOUT then? If POSIX rules apply, no data should be there in the correct web application design. Should STDOUT be discarded fully then? What if someone does not know about this discard convention?
Without these new challenges, I would agree that the split is valid. With them in place, I do think the current proposal is easier to understand for everyone.
As for @aucampia's comment, the application is running outside the 12factor context, so these rules do not apply. It does not mean, however, that we should transfer POSIX rules back, due to the reasons mentioned.