默认的Log4j initialization典型的应用是在web-server 环境下。在tomcat3.x和tomcat4.x下,你应该将配置文件Log4j.properties放在你的web应用程序的WEB-INF/classes 目录下。
Log4j将发现属性文件,并且以此初始化。这是使它工作的最容易的方法。
你也可以选择在运行tomcat前设置系统属性Log4j.configuration 。对于tomcat 3.x,TOMCAT_OPTS 系统变量是用来设置命令行的选项。对于tomcat4.0,用系统环境变量CATALINA_OPTS 代替了TOMCAT_OPTS。
UNIX 命令行
export TOMCAT_OPTS="-DLog4j.configuration=foobar.txt"
告诉Log4j用文件foobar.txt作为默认的配置文件。这个文件应该放在WEB-INF/classes 目录下。这个文件将被PropertyConfigurator所读。每个web-application将用不同的默认配置文件,因为每个文件是和它的web-application 相关的。
不同的web-application将通过它们自己的类装载器来装载Log4j。这样,每个Log4j的环境将独立的运作,而没有任何的相互同步。例如:在多个web-application中定义了完全相同的输出源的FileAppenders将尝试写同样的文件。结果好象是缺乏安全性的。你必须确保每个不同的web-application的Log4j配置没有用到同样的系统资源。
用一个特别的servlet来做Log4j的初始化也是可以的。如下是一个例子:
public class Log4jInit extends HttpServlet { public void init() { String prefix = getServletContext().getRealPath("/"); String file = getInitParameter("Log4j-init-file"); if(file != null) { PropertyConfigurator.configure(prefix+file); } } public void doGet(HttpServletRequest req, HttpServletResponse res) { } }
在web.xml中定义随后的servlet为你的web-application。
<servlet> <servlet-name>Log4j-init</servlet-name> <servlet-class>xx.xx.Log4jInit</servlet-class> <init-param> <param-name>Log4j-init-file</param-name> <param-value>WEB-INF/classes/Log4j.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
写一个初始化的servlet是最有弹性的初始化Log4j的方法。代码中没有任何限制,你可以在servlet的init方法中定义它。
log4j可以使用3中配置器来初始化:BasicConfigurator,DOMConfigurator,PropertyConfigurator
其语法为:
使用PropertyConfigurator适用于所有的系统。如下的语句:
PropertyConfigurator.configure("log4j.properties");
就以log4j.properties为配置文件初始化好了log4j环境。
注意一点:这个语句只需要在系统启动的时候执行一次。
例如,在ActionServlet的init()方法中调用一次。
public class ActionServlet extends HttpServlet{ ... /** * Initialize global variables */ public void init() throws ServletException { // 初始化Action资源 try{ initLog4j(); ... }catch(IOException e){ throw new ServletException("Load ActionRes is Error"); } } ... protected void initLog4j(){ PropertyConfigurator.configure("log4j.properties"); } ... }//end class ActionServlet