Reputation: 2253
How can I write the following for my properties file using log4j2?
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.null=org.apache.log4j.varia.NullAppender
Upvotes: 0
Views: 686
Reputation: 9141
Just curious, but what is the need for a NullAppender when you can just configure any appender to filter out everything?
Upvotes: 0
Reputation: 1963
You can implement NullAppender as a plugin.
Plugin implementation is like this:
package myPlugins;
@Plugin(name = "NullAppenderDemo", category = "Core", elementType = "appender", printObject = true)
public classNullAppenderDemo extends AbstractAppender {
private static final long serialVersionUID = 1L;
protected NullAppenderDemo(String name, Filter filter, Layout<? extends Serializable> layout, boolean ignoreExceptions) {
super(name, filter, layout, ignoreExceptions);
}
@Override
public void append(LogEvent event) {
// Nothing is done here !!!
}
@PluginFactory
public static NullAppender createAppender(
@PluginAttribute("name") String name,
@PluginAttribute("ignoreExceptions") boolean ignoreExceptions,
@PluginElement("Layout") Layout<? extends Serializable> layout,
@PluginElement("Filters") Filter filter) {
if (name == null) {
LOGGER.error("No name provided for NullAppender");
return null;
}
return new NullAppenderDemo(name, filter, layout, ignoreExceptions);
}
}
Specify the package of the plugin class in the log4j2 configuration:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration packages="myPlugins">
Use appenders (I prefer xml format to properties, but you can do the mapping according to the manual, if you prefer the properties:
<Appenders>
<NullAppender name="null">
</NullAppender>
<Console name="console">
<PatternLayout>
<pattern>
%d %level{length=2} (%c{1.}.%M:%L) - %m%n
</pattern>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<root level="info">
<appenderRef ref="console" />
</root>
<logger name="nullAppenderPackage" additivity="false">
<appenderRef ref="null" />
</logger>
</Loggers>
But actually, you can have the same effect with level="off" without NullAppender at all:
<logger name="nullAppenderPackage" level="off">
</logger>
You can find more details here.
Upvotes: 1