isobretatel
isobretatel

Reputation: 3958

How to configure log4j2 with two root levels?

I would like to configure log4j2 the following way:

  1. Report ERROR events to Sentry.
  2. Report INFO events to log file.

Something like:

    <Loggers>
        <!-- ERROR events are reported to Sentry. -->
        <Root level="error">
            <AppenderRef ref="Sentry" />
        </Root>

        <!-- INFO events are reported to log file. -->
        <Root level="info">
            <AppenderRef ref="myLog" />
        </Root>

But of course I get error "Configuration has multiple root loggers. There can be only one.".

Upvotes: 4

Views: 8259

Answers (3)

Adam Jedrzejko
Adam Jedrzejko

Reputation: 41

I approached similar issue. I've tried both suggested solutions and any of those were working for me. After few hours of trying to figure it out I have found out on logging.apache.org solution very similar to suggested one by Vikas Sachdeva.

<Loggers>
    <Root level="info">
        <AppenderRef ref="Sentry" level="error "/>
        <AppenderRef ref="myLog" level="info" />
    </Root>
</Loggers>

Without setting up level info directly in root my app was logging nothing. Adding this small change everything works great.

Upvotes: 2

isobretatel
isobretatel

Reputation: 3958

Workaround that works for me:

    <!-- ERROR events are reported to Sentry. -->
    <Root level="error">
        <AppenderRef ref="Sentry" />
    </Root>

    <!-- INFO events are reported to myLog. -->
    <Logger name="com" level="info">
        <AppenderRef ref="myLog" />
    </Logger>
    <Logger name="org" level="info">
        <AppenderRef ref="myLog" />
    </Logger>

Upvotes: 2

Vikas Sachdeva
Vikas Sachdeva

Reputation: 5803

You can specify log level for appender as well -

<Loggers>
        <Root>
            <AppenderRef ref="Sentry" level="error "/>
            <AppenderRef ref="myLog" level="info" />
        </Root>
</Loggers>

With this configuration, error and above level logs will be sent to Sentry appender. And info and above level logs (including error) will be sent to myLog

Upvotes: 13

Related Questions