It would be nice to avoid this concatenation... using join() is a great way to build complex strings minimizing heap allocations. By concatenating at the end, we're getting a potentially big string (with error message, stack trace, etc.) and reallocation for it along with the timestamp.

Maybe we could have the first element in the array be the first line of the log message, so that we can just .join('\n')