mr nooby noob
mr nooby noob

Reputation: 2253

How to convert these two log4j lines to log4j2?

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

Answers (2)

rgoers
rgoers

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

asch
asch

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

Related Questions