You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Stephen Johns <mr...@gmail.com> on 2022/04/20 18:02:46 UTC

LogManager.getLogger("name") not finding custom loggers

All of the following return the same logger - that being the Root logger
for the class that this code is in. I would like to think these would all
be different and I would get my 3 custom ones back for the first 3 calls.
Note the files specified by the appenders are created, but no logs are sent
to them.

Logger _l = (Logger) LogManager.getLogger("Global");
       _l = (Logger) LogManager.getLogger("fakeswitch");
       _l = (Logger) LogManager.getLogger("fakeswitch_two");
       _l = (Logger) LogManager.getLogger();

I create custom loggers using the following:

ComponentBuilder triggeringPolicy =
configurationBuilder.newComponent("Policies")
        .addComponent(configurationBuilder.newComponent("TimeBasedTriggeringPolicy").
                addAttribute("interval", "1"));

AppenderComponentBuilder log4jFileAppenderBuilder = configurationBuilder.
        newAppender(pName + "_SmdrDailyRollingFileAppender", "RollingFile");
log4jFileAppenderBuilder.addAttribute("filename", pLogFilename);
log4jFileAppenderBuilder.addAttribute("filePattern", pLogFilenamePattern);
log4jFileAppenderBuilder.addComponent(triggeringPolicy);

// Configure the PatternLayout
LayoutComponentBuilder layoutComponentBuilder =
configurationBuilder.newLayout("PatternLayout").
        addAttribute("pattern", DEBUG_PATTERN_LAYOUT_STRING);
log4jFileAppenderBuilder.add(layoutComponentBuilder);

// Add it back into configuration
configurationBuilder.add(log4jFileAppenderBuilder);

// https://logging.apache.org/log4j/2.x/manual/customconfig.html
LoggerComponentBuilder logger = configurationBuilder.newLogger(pName,
Level.DEBUG);
logger.add(configurationBuilder.newAppenderRef(pName +
"_SmdrDailyRollingFileAppender"));
logger.addAttribute("additivity", false);
configurationBuilder.add(logger);

// Actually use it
LoggerContext _loggerContext =
Configurator.initialize(configurationBuilder.build());

The equiv XML from writeXmlConfiguration is:

<?xml version="1.0" ?>
<Configuration>
    <Appenders>
        <RollingFile name="Global_SmdrDailyRollingFileAppender"
filename="ps/debug/SMDR_DEBUG.txt"
                     filePattern="ps/debug/SMDR_DEBUG_%d{yyyyMMdd}.txt.gz">
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <PatternLayout pattern="%d{MM.DD.yy-HH:mm:ss} %m%n"/>
        </RollingFile>
        <RollingFile name="fakeswitch_SmdrDailyRollingFileAppender"
filename="ps/debug/SMDR_DEBUG_fakeswitch.txt"

filePattern="ps/debug/SMDR_DEBUG_fakeswitch_%d{yyyyMMdd}.txt.gz">
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <PatternLayout pattern="%d{MM.DD.yy-HH:mm:ss} %m%n"/>
        </RollingFile>
        <RollingFile name="fakeswitch_two_SmdrDailyRollingFileAppender"
                     filename="ps/debug/SMDR_DEBUG_fakeswitch_two.txt"

filePattern="ps/debug/SMDR_DEBUG_fakeswitch_two_%d{yyyyMMdd}.txt.gz">
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <PatternLayout pattern="%d{MM.DD.yy-HH:mm:ss} %m%n"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="Global" level="DEBUG" additivity="false">
            <AppenderRef ref="Global_SmdrDailyRollingFileAppender"/>
        </Logger>
        <Logger name="fakeswitch" level="DEBUG" additivity="false">
            <AppenderRef ref="fakeswitch_SmdrDailyRollingFileAppender"/>
        </Logger>
        <Logger name="fakeswitch_two" level="DEBUG" additivity="false">
            <AppenderRef ref="fakeswitch_two_SmdrDailyRollingFileAppender"/>
        </Logger>
    </Loggers>
</Configuration>





-- 
   ☮

Re: LogManager.getLogger("name") not finding custom loggers

Posted by Stephen Johns <mr...@gmail.com>.
Thank you!

I believe you helped me with that in a different situation earlier this
year.

I promise I have learned it this time!

On Wed, Apr 20, 2022 at 1:14 PM Piotr P. Karwasz <pi...@gmail.com>
wrote:

> Hello Stephen,
>
> On Wed, 20 Apr 2022 at 20:03, Stephen Johns <mr...@gmail.com>
> wrote:
>
> > Configurator.initialize(configurationBuilder.build());
> >
>
> This only works if the `LoggerContext` has not been initialized yet. Since
> every call to a `LogManager` method initializes a `LoggerContext`, it is
> almost certainly too late to use `Configurator.initialize`.
>
> Use `Configuration.reconfigure` instead, which works in all cases.
>
> Piotr
>


-- 
   ☮

Re: LogManager.getLogger("name") not finding custom loggers

Posted by "Piotr P. Karwasz" <pi...@gmail.com>.
Hello Stephen,

On Wed, 20 Apr 2022 at 20:03, Stephen Johns <mr...@gmail.com>
wrote:

> Configurator.initialize(configurationBuilder.build());
>

This only works if the `LoggerContext` has not been initialized yet. Since
every call to a `LogManager` method initializes a `LoggerContext`, it is
almost certainly too late to use `Configurator.initialize`.

Use `Configuration.reconfigure` instead, which works in all cases.

Piotr