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