Log4j Custom Appender

Active4 years, 11 months ago

My class code is as below.

And my configuration of log4j.properties are as follows.

  1. Log4j Appender. This is the base of log4j Appenders that defines the methods to implement by an appender. Log4j AppenderSkeleton. This class provides the code for common functionality, such as support for threshold filtering and support for general filters.
  2. When you annotate your custom Appender class with @Plugin(name='MyCustomAppender'., the plugin name becomes the configuration element name, so a configuration with your custom appender would then look like this: Note that the packages attribute on the configuration is a comma-separated list of all the packages with custom log4j2 plugins.

Geode uses log4j2 for logging. In this post we are going to see how to define a custom appender. Step-by-step guide. The caveats around configuring log4j for Geode are discussed in the docs.

This is creating a log for different types, for example, DEBUG, ERROR, and INFO in different log files. But what limitation is it? It is creating larger and larger log files. I want to make log files for, say, of 5 MB, and previous logs should be removed. How can I do that? When I try with RollingFile Appender, I get the below log files only.

Rolling of log files ERROR,DEBUG is not done, but INFO is done.

ProgramFOX
4,6447 gold badges35 silver badges46 bronze badges
Bhavik AmbaniBhavik Ambani
5,35012 gold badges47 silver badges82 bronze badges

1 Answer

I suggest you derive from RollingFileAppender instead of FileAppender. This will give you the possibility to define how large the log-files will grow, and how many 'old' ones you want to keep. Check out the manual on how to use it later in your log4j.propertiers.

If I understand correctly, you want one file per log-level, is that correct? If so, I suggest you follow this FAQ-Entry rather than 'rolling' your own solution :)

Peter Mortensen
14.5k19 gold badges89 silver badges118 bronze badges
quaylarquaylar
1,8211 gold badge11 silver badges23 bronze badges

Not the answer you're looking for? Browse other questions tagged javalogginglog4j or ask your own question.

Active5 months ago

As disscussed in this link : How to create a own Appender in log4j?

For creating a custom appender in log4j 1.x we have to extend the AppenderSkeleton class and implements its append method.

Similarly How we can create a custom appender in log4j2 as we dont have AppenderSkelton class to extend and all other appender extend AppenderBase class .

Community
saurabh goyalsaurabh goyal
7415 gold badges24 silver badges44 bronze badges

4 Answers

This works quite differently in log4j2 than in log4j-1.2.

Log4j Custom Appender

Log4j2 Custom Appender Tutorial

In log4j2, you would create a plugin for this. The manual has an explanation with an example for a custom appender here: http://logging.apache.org/log4j/2.x/manual/extending.html#Appenders

It may be convenient to extend org.apache.logging.log4j.core.appender.AbstractAppender, but this is not required.

When you annotate your custom Appender class with @Plugin(name='MyCustomAppender', ...., the plugin name becomes the configuration element name, so a configuration with your custom appender would then look like this:

Note that the packages attribute on the configuration is a comma-separated list of all the packages with custom log4j2 plugins. Log4j2 will search these packages in the classpath for classes annotated with @Plugin.

Here is a sample custom appender that prints to the console:

For more details on plugins:http://logging.apache.org/log4j/2.x/manual/plugins.html

If the manual is not enough, it may be useful to look at the source code for the built-in appenders in log4j-core.

Remko PopmaRemko Popma
23.3k7 gold badges57 silver badges78 bronze badges

It looks like plugin appenders are scanned at startup and cannot be added during runtime. Is that true?

to add new appender while running you can use monitorInterval property to update log configuration i.e. every 60 sec:

Log4j Custom Appender Parameters

JavoslawJavoslaw

For people need to output to TextArea, here is a working tweak

Log4j custom appender pattern

Make the TextArea static

Add static method in your Frame

Call in Appender's append

pppk520pppk520

As you pointed out AppenderSkeleton is not available anymore so the solutions in How to create my own Appender in log4j? will not work.

Using Mockito, or similar library to create an Appender with an ArgumentCaptor will not work if you're expecting multiple logging messages because the MutableLogEvent is reused over multiple log messages.

The most generic solution I found for log4j2 is to provide a mock implementation that records all the messages. It does not require any additional libraries like Mockito or JMockit.

josephjoseph

Log4j2 Custom Appender

Not the answer you're looking for? Browse other questions tagged javalogginglog4jlog4j2 or ask your own question.