We use our https://github.com/synopse/mORMot/blob/master/SynLog.pas Open Source logging framework on server side, with sometimes dozens of threads into the same log file.
It has very high performance, so logging don't slow down the process, and you can make very useful forensic and analysis if needed.
Having all threads logging in the same log file is at the same time a nightmare and a blessing.
It may be a nightmare since all operations are interleaved and difficult to identify.
It is a blessing with the right tool, able to filter for one or several threads, then find out what is really occuring: in this case, a single log file is better than several.
For instance, one of our https://livemon.com server generates TB of logs - see https://leela1.livemon.net/metrics/counters - and we can still handle it.
This instance for instance is running since more than 8 months without being restarted, and with hunderths of simultaneous connections, logging incoming data every second... π
We defined our simple and very usable log viewer tool - see http://blog.synopse.info/post/2011/08/20/Enhanced-Log-viewer and https://synopse.info/files/html/Synopse mORMot Framework SAD 1.18.html#TITL_103
This is the key to be able to have something usable from heavily multithreaded logs.
So if you can, rather use a single log file per process, with proper thread identification and filtering.