Something I see a lot, especially in node applications, is duplicate messages logged due to an exception being caught and logged in several places as the stack unwinds. For example with the following (contrived) code: const httpCall = () => { const url = 'http://example.com'; try { throw new Error('Something went wrong!'); } catch (error: any) { log(error.message, { url }); throw error; } }; The real error is here in httpCall , but some context about the error needs to be logged, so it is caught, logged and rethrown. const callService = () => { const someContext = 'The service we called'; try { httpCall(); } catch (error: any) { log(`Service failed: ${error.message}`, { someContext }); throw error; } } ; httpCall is called from a service wrapper, which has its own context which needs to be logged, so again the er...