エラーを分離する 1 つの方法は、try catch を使用することです。メイン ブロックではすべてが stdout に送信され、コードによってスローされたエラーはすべてキャッチされ、stderr に送信されます。
これは、エラー メッセージのログではなく、コードでスローされたエラーのみを処理しますが、解決策になる可能性があります。
result = tryCatch({
sink(stdout(), type = "message") # sink all messages, warnings, errors to stdout
message('Starting! This message will go to stdout')
warning('Warning! This message will go to stdout')
error('Error! This message will ALSO go to stdout')
#Call your code here, e.g.
#...
stop('An error is thrown', call.=FALSE)
#...
}, error = function(e) {
sink(NULL, type="message") # close the sink
#Now sink closed, you can re-raise the error, and it will be directed to sterr:
stop(paste0('Error: ', e), call.=FALSE)
})