- log4j Tutorial
In the example, the FileAppender appends log events to the log file named crawl.log (which is created in the current working directory). The ConsoleAppender writes to the console using a simple pattern in which only the messages are printed, but not the more verbose information (logging level, timestamp, and so on). In this tutorial, we'll learn about creating a custom Log4j2 appender. If you're looking for the introduction to Log4j2, please take a look at this article. Log4j2 ships with a lot of built-in appenders which can be used for various purposes such as logging to a file, to a database, to a socket or to a NoSQL database.
- The appender creates the file on-demand. The appender only creates the file when a log event passes all filters and is routed to this appender. Defaults to false. Filter: Filter: A Filter to determine if the event should be handled by this Appender. More than one Filter may be used by using a CompositeFilter. FileName: String.
- Above path is that where we have stored log4j.xml file externally to get this path go up to the log4j.xml file in external device and right click select get info, where we will get path, copy that path - log4jRefreshInterval 6000.
- Using the Log4j 1.x bridge. Perhaps the simplest way to convert to using Log4j 2 is to replace the log4j 1.x jar file with Log4j 2's log4j-1.2-api.jar.However, to use this successfully applications must meet the following requirements.
- log4j Useful Resources
- Selected Reading
To write your logging information into a file, you would have to use org.apache.log4j.FileAppender.
FileAppender Configuration
FileAppender has the following configurable parameters:
Property | Description |
---|---|
immediateFlush | This flag is by default set to true, which means the output stream to the file being flushed with each append operation. |
encoding | It is possible to use any character-encoding. By default, it is the platform-specific encoding scheme. |
threshold | The threshold level for this appender. |
Filename | The name of the log file. |
fileAppend | This is by default set to true, which means the logging information being appended to the end of the same file. |
bufferedIO | This flag indicates whether we need buffered writing enabled. By default, it is set to false. |
bufferSize | If buffered I/O is enabled, it indicates the buffer size. By default, it is set to 8kb. |
Following is a sample configuration file log4j.properties for FileAppender −
If you wish to have an XML configuration file equivalent to the above log4j.properties file, then here is the content:
You can try log4j - Sample Program with the above configuration.
Logging in Multiple Files
You may want to write your log messages into multiple files for certain reasons, for example, if the file size reached to a certain threshold.
To write your logging information into multiple files, you would have to use org.apache.log4j.RollingFileAppender class which extends the FileAppender class and inherits all its properties.
We have the following configurable parameters in addition to the ones mentioned above for FileAppender −
Property | Description |
---|---|
maxFileSize | This is the critical size of the file above which the file will be rolled. Default value is 10 MB. |
maxBackupIndex | This property denotes the number of backup files to be created. Default value is 1. |
Following is a sample configuration file log4j.properties for RollingFileAppender.
If you wish to have an XML configuration file, you can generate the same as mentioned in the initial section and add only additional parameters related to RollingFileAppender.
This example configuration demonstrates that the maximum permissible size of each log file is 5 MB. Upon exceeding the maximum size, a new log file will be created. Since maxBackupIndex is defined as 2, once the second log file reaches the maximum size, the first log file will be erased and thereafter, all the logging information will be rolled back to the first log file.
You can try log4j - Sample Program with the above configuration.
Daily Log File Generation
There may be a requirement to generate your log files on a daily basis to keep a clean record of your logging information.
To write your logging information into files on a daily basis, you would have to use org.apache.log4j.DailyRollingFileAppender class which extends the FileAppender class and inherits all its properties.
There is only one important configurable parameter in addition to the ones mentioned above for FileAppender:
Property | Description |
---|---|
DatePattern | This indicates when to roll over the file and the naming convention to be followed. By default, roll over is performed at midnight each day. |
DatePattern controls the rollover schedule using one of the following patterns:
DatePattern | Description |
---|---|
'.' yyyy-MM | Roll over at the end of each month and at the beginning of the next month. |
'.' yyyy-MM-dd | Roll over at midnight each day. This is the default value. |
'.' yyyy-MM-dd-a | Roll over at midday and midnight of each day. |
'.' yyyy-MM-dd-HH | Roll over at the top of every hour. |
'.' yyyy-MM-dd-HH-mm | Roll over every minute. |
'.' yyyy-ww | Roll over on the first day of each week depending upon the locale. |
Following is a sample configuration file log4j.properties to generate log files rolling over at midday and midnight of each day.
If you wish to have an XML configuration file, you can generate the same as mentioned in the initial section and add only additional parameters related to DailyRollingFileAppender.
You can try log4j - Sample Program with the above configuration.
Summed up the above three methods, it is advisable to approach three, but still cumbersome, to write a servlet, write a lot of code
The following method is more practical I think we can try:
The default generated log file is in the server's Bin directory (I am using tomcat) so that the relative path is passed. webapps//project name//log directory//log file (or. /webapps/the project name/log directory/log file, you can automatically create log directories and log files in your project.
method One: replace absolute path with relative path
The main is to expand the Log4j Rollingfileappender class, the other fileappender the same reason. The extension method is to use a subclass to overwrite the Setfile method, which is called when the log4j reads the configuration file to generate Appender, and the path in the configuration file is passed in so that I can add the root path to the path as I think. This method allows you to determine the location of the generated log relative to the Web application root by configuring the Log4j.appender.A1.File property in log4j.properties with a relative path freely.
Example: Zxmdailyrollingfileappender.java
Log4j.properties file
method Two: Using server environment variables
is to set the log path relative to ${catalina.home} or ${catalina.base}, using environment variables such as ${catalina.home} or ${catalina.base that already exist in the server VM. The log can only be placed in the server subdirectory, and if the other server is used, change the corresponding environment variable. This method platform porting is not convenient.
Example: Log4j.appender.file.file=${catalina.base}/logs/psp_error.log
The catalina.home point to the public information is the parent directory of Bin and Lib.
The catalina.base points to the private information for each Tomcat directory, which is the parent directory of the Conf, logs, temp, webapps, and work.
When you run only one Tomcat instance, the two properties point to the same location.
method Three: load the File property implementation relative path through the servlet initialization init () method
is to extend the Actionservlet class, override its init () method, load the log4j.properties position parameters in the new method, and freely configure the log4j configuration file name and location. You can also freely configure the path of the log4j log file relative to the current application.
Example:
Xml
Log4j Appender File File For Mac Pro
Configservlet.java file