1 log4j Configuration Instructions
1.1 Configuration Files
Log4j can be set dynamically through Java programs, the obvious disadvantage is: if you need to modify the log output level information, you must modify the Java file, and then recompile, it is troublesome;
Log4j can also be set through the configuration file, which currently supports two types of configuration files:
XML file
Properties File (recommended)
The following is the complete contents of a log4j configuration file:
Copy Code code as follows:
Log4j.rootcategory=info, stdout
Log4j.rootlogger=info, stdout
### stdout ###
Log4j.appender.stdout=org.apache.log4j.consoleappender
Log4j.appender.stdout.target=system.out
Log4j.appender.stdout.layout=org.apache.log4j.patternlayout
Log4j.appender.stdout.layout.conversionpattern=%d{absolute}%5p-%m%n
### Set Package ###
Log4j.logger.org.springframework=info
Log4j.logger.org.apache.catalina=info
Log4j.logger.org.apache.commons.digester.digester=info
Log4j.logger.org.apache.catalina.startup.tldconfig=info
Log4j.logger.chb.test=debug
1.2 Configuration Root Logger
The root logger primarily defines the log level and output destination supported by log4j, and its syntax is:
Log4j.rootlogger = [level], Appendername, Appendername, ...
Where level is the priority of logging, divided into off, FATAL, ERROR, WARN, INFO, DEBUG, all, or custom levels.
It is recommended to use only four levels, from high to low, respectively, error, WARN, INFO, and DEBUG.
APPENDERNAME specifies where the log information is to be exported, and multiple output destinations can be specified at the same time.
1.3 Configuration Output Destination Appender
Appender mainly defines the location of the output of log information, the main syntax is:
Copy Code code as follows:
Log4j.appender.appenderName = ClassInfo
Log4j.appender.appenderName.option1 = value1
...
Log4j.appender.appenderName.optionN = Valuen
LOG4J offers the following appender:
Org.apache.log4j.consoleappender (console),
org.apache.log4j.fileappender (file),
Org.apache.log4j.dailyrollingfileappender (a log file is generated every day),
Org.apache.log4j.rollingfileappender (a new file is generated when the file size reaches a specified size)
Org.apache.log4j.writerappender (send log information to any specified place in streaming format)
Take Consoleappender For example, such as:
Copy Code code as follows:
Log4j.appender.stdout=org.apache.log4j.consoleappender
Log4j.appender.stdout.target=system.out
1.4 Format of configuration log information layout
Layout is responsible for formatting the output of Appender, whose syntax is:
Copy Code code as follows:
Log4j.appender.appenderName.layout = ClassInfo
Log4j.appender.appenderName.layout.option1 = value1
...
Log4j.appender.appenderName.layout.optionN = Valuen
Among them, LOG4J provides the following layout:
org.apache.log4j.htmllayout (layout in HTML form),
Org.apache.log4j.patternlayout (You can specify layout patterns flexibly),
Org.apache.log4j.simplelayout (level and information string that contains log information)
Org.apache.log4j.ttcclayout (contains information about the time, thread, category, and so on that the log was generated)
1.5 Set Package output level
You can set the log output level for different package, which is:
Log4j.logger.packagename=level
Where the PackageName is the actual package name and level is the log class, for example:
Copy Code code as follows:
Log4j.logger.org.springframework=info
Log4j.logger.org.apache.catalina=info
Log4j.logger.org.apache.commons.digester.digester=info
Log4j.logger.org.apache.catalina.startup.tldconfig=info
Log4j.logger.chb.test=debug
2 log4j combined with Java EE
2.1 Using the Spring schema
Spring is really good, doing a lot of things for us, if the system uses the spring framework, it is easy to integrate log4j, which is divided into 3 steps, as follows:
2.1.1 Define log4j configuration file
Copy Code code as follows:
Log4j.rootcategory=info, stdout
Log4j.rootlogger=info, stdout
### stdout ###
Log4j.appender.stdout=org.apache.log4j.consoleappender
Log4j.appender.stdout.target=system.out
Log4j.appender.stdout.layout=org.apache.log4j.patternlayout
Log4j.appender.stdout.layout.conversionpattern=%d{absolute}%5p-%m%n
### Log to File ###
Log4j.logger.org.springframework=info
Log4j.logger.org.apache.catalina=info
Log4j.logger.org.apache.commons.digester.digester=info
Log4j.logger.org.apache.catalina.startup.tldconfig=info
Log4j.logger.chb.test=debug
2.1.2 Definition Listener
The listener needs to be defined in Web.xml, which includes: Define the log4j configuration file directory, Log4j Listener, as follows:
Copy Code code as follows:
<?xml version= "1.0" encoding= "UTF-8"?>
<web-app version= "2.4"
Xmlns= "HTTP://JAVA.SUN.COM/XML/NS/J2EE"
Xmlns:xsi= "Http://www.w3.org/2001/XMLSchema-instance"
Xsi:schemalocation= "Http://java.sun.com/xml/ns/j2ee
Http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd ">
<!--log4j configuration file location by spring load-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/web-inf/classes/applicationcontext*.xml
</param-value>
</context-param>
<!--Spring log4j Config loader-->
<listener>
<listener-class>
Org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<listener>
<listener-class>
Org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>InitiaServlet</servlet-name>
<servlet-class>chb.test.web.InitiaServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.1.3 Test Class
Copy Code code as follows:
Package com.dheaven.mip.web;
Import javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Org.apache.log4j.Logger;
public class Initiaservlet extends HttpServlet {
protected Logger log = Logger.getlogger (Initiaservlet.class);
Private static final long serialversionuid = 8550329576989690578L;
/**
* constructor of the object.
*/
Public Initiaservlet () {
Super ();
}
/**
* Destruction of the servlet. <br>
*/
public void Destroy () {
Super.destroy ();
}
/**
* Initialization of the servlet. <br>
*
* @throws servletexception If an error occure
*/
public void Init () throws Servletexception {
Log.debug ("Server started, log4j started work");
}
}
2.2 Do not use the spring schema
If the system is not using spring, we take the servlet as an example, very simple, everyone follow the steps to do, only paste code, not nonsense.
2.2.1 Define log4j configuration file
In the Web-inf directory of Web engineering, the content is as follows:
Copy Code code as follows:
Log4j.rootcategory=info, stdout
Log4j.rootlogger=info, stdout
### stdout ###
Log4j.appender.stdout=org.apache.log4j.consoleappender
Log4j.appender.stdout.target=system.out
Log4j.appender.stdout.layout=org.apache.log4j.patternlayout
Log4j.appender.stdout.layout.conversionpattern=%d{absolute}%5p-%m%n
### Set Package ###
Log4j.logger.org.apache.catalina=info
Log4j.logger.org.apache.commons.digester.digester=info
Log4j.logger.org.apache.catalina.startup.tldconfig=info
Log4j.logger.com.dheaven=debug
2.2.2 Create log4j initialization class
Copy Code code as follows:
Package com.dheaven.mip.web;
Import javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Org.apache.log4j.PropertyConfigurator;
public class Initlog4j extends HttpServlet {
Private static final long serialversionuid = 1L;
public void Init () throws Servletexception {
String prefix = Getservletcontext (). Getrealpath ("/");
prefix = prefix.replace ("//", "/");
String file = Getinitparameter ("Log4j-init-file");
If the Log4j-init-file is isn't set, then no point in trying
if (file!= null) {
Propertyconfigurator.configure (prefix + file);
}
}
}
2.2.3 Define initialization classes in Web.xml
Copy Code code as follows:
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>chb.test.web.InitLog4j</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2.2.4 Test Class
Copy Code code as follows:
Package chb.test.web;
Import javax.servlet.ServletException;
Import Javax.servlet.http.HttpServlet;
Import Org.apache.log4j.Logger;
public class Initiaservlet extends HttpServlet {
protected Logger log = Logger.getlogger (Initiaservlet.class);
Private static final long serialversionuid = 8550329576989690578L;
/**
* constructor of the object.
*/
Public Initiaservlet () {
Super ();
}
/**
* Destruction of the servlet. <br>
*/
public void Destroy () {
Super.destroy ();
}
/**
* Initialization of the servlet. <br>
*
* @throws servletexception If an error occure
*/
public void Init () throws Servletexception {
Log.debug ("Server started, log4j started work");
}
}