Skip to content

Make logger.error(ex);, logger.info(ex);, etc. print stack trace by default #3433

@Niko-O

Description

@Niko-O

It is too easy to write code like this:

try
{
    doThing();
}
catch (ThingFailedException ex)
{
    logger.error("Doing this thing failed.");
    logger.error("Context ID: " + context.id);
    logger.error("SomeSettings: " + someSetting);
    logger.error(ex);
    throw new WhateverException(ex);
}

Especially if you come back to a project after months and you don't remember anything about the log4j API specifics.
You think you you log everything you need, but you don't get the exception's stack trace here. You'd have to write logger.error("", ex); here, which is extremely unintuitive! Or logger.catching(ex), but that's another special thing I'd need to memorize.

I propose to change the default behavior such that the stack trace is printed in this case. I don't care how it's achieved, e.g. by adding a void error(Throwable) overload, or adding a check in the existing void error(Object) overload. The point is that it should be the default behavior because that's what's expected.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    To triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions