论坛首页 Java企业应用论坛

在war包中使用Log4j的问题

浏览 8440 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-02-02  
本来没有打包的情况下,log4j一切正常。当我将整个应用程序打成war包后,log4j就没有作用了,也没有任何报错信息。我估计是因为Log4j程序(jar包)和配置文件不在一个类加载器加载范围中的缘故。我用的是WLS,请问有哪位有解决的良方?
   发表时间:2004-02-02  
将Log4j加入Classpath后就行了 
0 请登录后投票
   发表时间:2004-02-18  
很多地方都在介绍LOG4J,看来很好。我也看了看,想把它用到项目中去,能介绍一下你是怎么做的吗?
0 请登录后投票
   发表时间:2004-02-18  
当然可以咯,你想知道那方面的呢?是怎么配置还是怎么在代码中使用?
0 请登录后投票
   发表时间:2004-02-19  
我是第一次用LOG4J,你就给我多介绍点吧。
我想知道配置的步骤和需要注意的地方,配置好了就可以在程序中用了吧。
0 请登录后投票
   发表时间:2004-02-20  
首先,log4j的配置有两种方式一种是使用properties文件,一种是使用xml文件。一般看你的习惯了,我是喜欢使用xml文件的。基本配置的主要内容分为二大块,一块是appender你可以认为是输出方式,一块是Logger就是日志记录器。

appender常用的有输出到控制台的、输出到文件的、输出到数据库的,以及输出到某个socket的。每个appender需要设置它的输出格式也就是layout。layout也有许多种,我经常使用XMLLayout,主要是我喜欢用log4j自带的chainsaw这个工具来查看日志,这个工具只能查看XML格式的文档。如果不用这个工具,那一般就会使用PatternLayout,然后设置ConversionPattern即具体的输出格式。

logger是用来区分不同的日志记录器的。log4j中最高的级别是root,自己定义的级别都是root的子logger。每个logger都可以指定appender,如果没有指定就按照其父logger的appender来输出。举个例子:net.example,如果没有指定它的appender则它会去找net的appender,如果net也没有指定就按照root的来。所以,一般来说你需要指定root的appender,不然如果你没有为某一特定category的logger指定appender就会显示log4j初始化出错。此外logger的设置中还需要指定需要输出的日志级别,日志级别有info,warn,error,debug,fatal等,你也可以定义自己的级别。

在配置文件中完成后,需要将log4j.jar和log4j.xml(log4j.properties)放在类路径上,这样会起作用。下面是一个log4j.xml的例子。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="CON" class="org.apache.log4j.FileAppender">
	<param name="Threshold" value="INFO"/>
	<param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/system.log"/>
	<layout class="org.apache.log4j.xml.XMLLayout"/>
		
</appender>

<appender name="HIBERNATE" class="org.apache.log4j.FileAppender">
	<param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/hibernate.log"/>
	<layout class="org.apache.log4j.xml.XMLLayout"/>
</appender>

<appender name="CIPEJB" class="org.apache.log4j.FileAppender">
	<param name="File" value="C:/Documents and Settings/xujin/My Documents/logs/cipejb.log"/>
	<layout class="org.apache.log4j.xml.XMLLayout"/>
</appender>

<logger name="net.sf.hibernate">
	<level value="INFO"/>
	<appender-ref ref="HIBERNATE" />
</logger>

<logger name="com.up.cip.ejb">
	<level value="INFO"/>
	<appender-ref ref="CIPEJB" />
</logger>


<root>
	<level value ="INFO" />
	<appender-ref ref="CON" />
</root>
</log4j:configuration>
0 请登录后投票
   发表时间:2004-02-20  
啊哈,非常感谢!
看了你的回复,感觉明白了不少。我准备用在WEB上B/S结构里,需要在WEB.XML里边配置一下吗?如果不配置是不是它找不到配置文件呢?
还有在程序里,是不是也像jdk里的logging一样,要写个初始化类,才可以直接用呢?
0 请登录后投票
   发表时间:2004-02-20  
fanth 写道
啊哈,非常感谢!
看了你的回复,感觉明白了不少。我准备用在WEB上B/S结构里,需要在WEB.XML里边配置一下吗?如果不配置是不是它找不到配置文件呢?
还有在程序里,是不是也像jdk里的logging一样,要写个初始化类,才可以直接用呢?

1。不需要在web.xml中写。只要保证你的log4.xml和log4j.jar都在类路经上就行了。
2。使用时只要在程序中写如下代码
Logger logger=Logger.getLogger(com.yourcompany);就得到了一个名为com.yourcompany的logger,然后记录时就调用类似logger.warn(logString)就行了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics