log4j的初始化
Posted dainiao01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j的初始化相关的知识,希望对你有一定的参考价值。
1. Tomcat下的初始化
默认的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 相关的。
- export TOMCAT_OPTS="-DLog4j.debug -DLog4j.configuration=foobar.xml" export TOMCAT_OPTS="-DLog4j.debug -DLog4j.configuration=foobar.xml"
告 诉Log4j输出Log4j-internal的调试信息,并且用foobar.xml作为默认的配置文件。这个文件应该放在你的web- application的WEB-INF/classes 目录下。因为有.xml的扩展名,它将被DOMConfigurator所读。每个web-application将用不同的默认配置文件。因为每个文件 都和它所在的web-application 相关的。 - set TOMCAT_OPTS=-DLog4j.configuration=foobar.lcf
-DLog4j.configuratorClass=com.foo.BarConfigurator
告 诉Log4j用文件foobar.lcf作为默认的配置文件。这个文件应该放在你的web-application的WEB-INF/classes 目录下。因为定义了Log4j.configuratorClass 系统属性,文件将用自定义的com.foo.barconfigurator类来解析。每个web-application将用不同的默认配置文件。因为 每个文件都和它所在的web-application 相关的。 - set TOMCAT_OPTS=-DLog4j.configuration=file:/c:/foobar.lcf set TOMCAT_OPTS=-DLog4j.configuration=file:/c:/foobar.lcf
告诉Log4j用文件foobar.lcf作为默认的配置文件。这个配置文件用URL file:/c:/foobar.lcf定义了全路径名。这样同样的配置文件将被所有的web-application所用。
不同的web-application将通过它们自己的类装载器来装载Log4j。这样,每个Log4j的环境将独立的运作,而没有任何的相互同步。例 如:在多个web-application中定义了完全相同的输出源的FileAppenders将尝试写同样的文件。结果好象是缺乏安全性的。你必须确 保每个不同的web-application的Log4j配置没有用到同样的系统资源。
2. Servlet 的初始化
用一个特别的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) {
- }
- }
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方法中定义它。
3.根据配置文件初始化log4j
log4j可以使用3中配置器来初始化:BasicConfigurator,DOMConfigurator,PropertyConfigurator
其语法为:
- BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
- PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
- DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。
使用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
以上是关于log4j的初始化的主要内容,如果未能解决你的问题,请参考以下文章