打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Log4J一二三
————————————
提纲:
————————————
步骤一:初始化Log4J
步骤二:在Web模块中应用Log4J
步骤三:测试
步骤四:在EJB应用中使用Log4J
步骤五:测试
步骤六:部署
————————————
Log4J是一个易用而强大的日志系统。本文将介绍如何在WebSphere应用中用最佳的方式配置和使用Log4J,我们将开发一个J2EE 1.3应用,然后用WebSphere V5进行测试。
步骤一:初始化Log4J
在J2EE应用中初始化Log4J有时是一个棘手的问题。至少有两种办法可以初始化Log4J:
㈠ 调用PropertyConfigurator.configure(String propertyFileName)——该函数的参数是一个完整的路径名称,指向一个包含Log4J配置信息的属性文件。J2EE应用程序不能对属性文件所在的具体位置作任何假设——也就是说,使用该函数时,J2EE应用程序应当知道属性文件的确切位置。
㈡ 不调用PropertyConfigurator.configure(),而是让Log4J自己在J2EE模块的CLASSPATH中寻找一个叫Log4J.properties的属性文件。查找属性文件的操作在Logger.getLogger()函数第一次被调用时执行。在这篇文章中,我们将推荐使用这第二种方法。
下面是一个典型的log4j.properties属性文件。
# 默认日志级别ERROR。其他可供选择的级别包括INFO和DEBUGlog4j.rootLogger=ERROR, ROOTlog4j.appender.ROOT=org.apache.log4j.RollingFileAppenderlog4j.appender.ROOT.File=myapplication.loglog4j.appender.ROOT.MaxFileSize=1000KB# 保留5个旧的日志文件log4j.appender.ROOT.MaxBackupIndex=5log4j.appender.ROOT.layout=org.apache.log4j.PatternLayout# 日志格式:按照WebSphere通用日志格式相似的方式记录log4j.appender.ROOT.layout.ConversionPattern=[%d] %t %c %-5p - %m%n# 有选择地更改某些包或者类的日志级别log4j.logger.com.webage.ejbs=INFO
该配置文件展示了Log4J的如下功能:
⑴ 设置全局性的日志级别。ERROR级别将输出用Logger.error()方法记录的信息。INFO级别将输出由Logger.error()和Logger.info()记录的信息。最后,DEBUG级别将输出包括Logger.debug()调用在内的所有日志信息。
⑵ “轮换”日志文件。在本例中,当日志文件(myapplication.log)达到1000KB时,该文件就被关闭并备份,然后创建一个新的日志文件。
⑶ 设置日志文件的格式,包括时间、类的名称和日志信息正文。
⑷ 针对某个Java包或类,有选择地覆盖全局的日志级别。在本例中,我们把com.webage.ejbs包的日志级别设置成了INFO。
步骤二:在Web模块中应用Log4J
在这一部分,我们将学习如何在一个纯Web模块应用——即一个不包含EJB的应用中使用Log4J。
首先启动WSAD,创建一个J2EE 1.3企业应用项目,项目名称为LogTest,它包含一个Web模块,名称为LogTestWeb。具体步骤如下:
㈠ 选择菜单“文件”→“新建”→“项目”。在第一个对话框中选择J2EE、企业应用程序项目。点击“下一步”。
㈡ 在第二个对话框中,确认“创建J2EE 1.3‘企业应用程序’项目”,点击“下一步”。
㈢ 如图一,输入企业应用程序项目名称LogTest,取消“EJB模块”,在“Web模块”的项目名称中输入LogTestWeb。
㈣ 点击“完成”。
图一
在J2EE导航器中展开LogTestWeb,找到Java Source文件夹,在该文件夹下面创建一个log4j.properties文件:右键点击Java Source文件夹,选择菜单“新建”→“其他”,接着依次选择“简单”、“文件”,点击“下一步”,在“文件名”输入框输入文件名log4j.properties,点击“完成”。按照本文前面的介绍,输入log4j.properties属性文件的内容,如图二所示。当我们构造Web项目时,这个属性文件会被自动复制到WEB-INF/classes文件夹。不要直接在WEB-INF/classes文件夹下面创建log4j.properties属性文件,因为下一次重新构造Web项目时,WSAD会删除该目录下的属性文件。
图二
从http://jakarta.apache.org/log4j/index.html下载Log4J发行版。解开压缩,将包文件(例如log4j-1.2.8.jar)复制到Web模块的Web Content/WEB-INF/lib目录,如图三。
图三
再次右击Web模块的Java Source文件夹,添加一个Java类文件:右击Java Source文件夹,选择菜单“新建”→“类”,输入包的名称com.webage.model,输入类的名称MyModel,如图四,点击“完成”。
图四
打开MyModel.java文件,把它的内容改成:
package com.webage.model;import org.apache.log4j.Logger;public class MyModel {static Logger logger = Logger.getLogger(MyModel.class);;public void checkValid(String name, String value) throws Exception { logger.debug("ENTRY"); logger.debug("检查参数: " + name); if (value == null) { throw new Exception("缺少参数。"); } if (value.trim().length() == 0) { throw new Exception("参数空。"); } logger.debug("EXIT");}}
进阶指南:在实际开发中,作为Model的Java类通常在单独的Java项目中构造。如果这样的话,现在放入Web模块的Log4J的JAR文件应当移到独立Java项目的CLASSPATH之中,这样才能让Java类顺利通过编译。运行时,该Java项目的类将由Web模块的类装载器装入,同时也将从WEB-INF/lib/log4j-1.2.8.jar文件装入类。如果你想要单独运行该Java类(例如通过JUnit运行),则你必须配置启动环境加入Log4J的JAR文件。
在J2EE导航器中,再次右击Java Source文件夹,选择菜单“新建”→“Servlet”,指定包的名称com.webage.servlets,指定Servlet的名称MyServlet,点击“完成”。修改MyServlet,使它包含如下内容:
package com.webage.servlets;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import com.webage.model.MyModel;public class MyServlet extends HttpServlet { Logger logger = Logger.getLogger(MyServlet.class); public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logger.debug("ENTRY"); MyModel model = new MyModel(); resp.getWriter().println("<h1>Log4J测试</h1>"); try { model.checkValid("firstName", req.getParameter("firstName")); } catch (Exception e) { logger.error("doGet出现错误.", e); } logger.debug("EXIT"); } public void init() throws ServletException { super.init(); logger.info("Servlet初始化...");
步骤三:测试
将LogTest项目关联到一个WebSphere V5服务器,运行MyServlet。默认情况下,由于我们没有向Servlet提供参数,MyModel.checkValid方法将抛出一个异常,Servlet将在日志文件中记录该异常。Log4J的全局日志级别设置成了ERROR,Log4J会把该日志条目加入到日志文件myapplication.log。默认日志文件myapplication.log位于WSAD的安装根目录下。
打开log4j.properties文件,加入下面这行内容,将com.webage.model包的日志级别改成DEBUG。
log4j.logger.com.webage.model=DEBUG
为了让修改生效,重新启动LogTest项目。再次运行Servlet,检查日志文件的内容,这时日志文件应当显示出MyModel类的DEBUG级的日志信息。
如果你在WSAD的安装根目录下找不到日志文件myapplication.log,一种可能的原因是Log4J没有能够正常初始化。如果Log4J不能在CLASSPATH中找到log4j.properties文件,它将在标准输出设备上输出下列信息:
……..:WARN No appenders could be found for logger (com.webage.servlets.MyServlet). ……..:WARN Please initialize the log4j system properly.
如果你使用UNIX,请确保属性文件名的拼写没有错误(log4j.properties全部字母小写)。另外,无论在哪种系统上,请确保文件路径中的分隔符是UNIX风格的分隔符,例如:
log4j.appender.ROOT.File=c:/temp/myapplication.log
步骤四:在EJB应用中使用Log4J
在LogTest企业应用模块下新建一个EJB模块,名字为LogTestEJB,具体步骤是:在J2EE导航器视图中,右击LogTest,选择菜单“新建”→“项目”,再依次选择“EJB”→“EJB项目”,点击“下一步”。确认“创建2.0 EJB项目”。如图五,输入项目名称LogTestEJB,在“企业应用程序项目”中选择“现有”,然后点击“现有项目名”旁边的“浏览”按钮,选择LogTest。点击图五中的“完成”按钮。如果系统提示要修改服务器配置(加入子项目LogTestEJB),确认执行修改。
图五
把Log4J的JAR文件从LogTestWeb模块的WEB-INF/lib目录移到LogTest项目的根目录。右击导航器中的LogTest,选择菜单“新建”→“文件夹”,输入文件夹名称lib,点击“完成”按钮。把log4j.properties文件从LogTestWeb项目拖到刚才创建的lib文件夹下。完成后的导航器内容如图六所示。
图六
定义LogTestEJB项目对Log4J JAR文件的相关性:右击LogTestEJB,选择“特性”,出现图七对话框。选中“Java JAR相关性”,再选中Log4J的JAR文件(log4j-1.2.8.jar)。点击“确定”按钮。
图七
按照类似的操作步骤,定义LogTestWeb项目对Log4J JAR文件和LogTestEJB.jar的相关性(定义这些相关性之后,图六中LogTestWeb项目图标上的红色“X”就会消失)。
将LogTest/lib目录加入到服务器的CLASSPATH,操作步骤是:切换到“服务器”透视图,在“服务器配置”视图中双击服务器,点击“路径”选项卡,点击“类路径”清单旁边的“添加文件夹”,在“选择文件夹”对话框中双击扩展LogTest,选中Lib,最后点击“确定”。
步骤五:测试
在LogTestEJB项目中添加一个简单的会话EJB,名称为MySession。在MySessionBean.java中加入记录日志的功能。在WSAD自动生成的类的基础上进行修改,如下所示:
import org.apache.log4j.Logger;public class MySessionBean implements javax.ejb.SessionBean { private javax.ejb.SessionContext mySessionCtx; Logger logger = Logger.getLogger(MySessionBean.class); //... public void aMethod() { logger.debug("ENTRY aMethod"); logger.debug("EXIT aMethod"); }}
为aMethod()定义远程接口,然后在Servlet中加入调用EJB的代码。再次运行Servlet,观察日志文件的内容。
步骤六:部署
将应用从WSAD导出为一个EAR文件,然后将EAR安装到WebSphere服务器。默认情况下,从EAR提取的内容将安装到/installedApps/文件夹。从该文件夹把log4j.properties文件复制到/properties文件夹,该文件夹将被自动加入到每一个应用服务器的CLASSPATH。
默认情况下,被配置为应用服务器的工作目录。如果要在标准的/logs目录下创建Log4J的日志文件,请打开log4j.properties文件,按照如下方式修改日志文件的路径和名称:
log4j.appender.ROOT.File=logs/extranet.log
总结:在这篇文章中,我们探讨了如何在纯Web应用以及EJB、Web混合应用中使用Log4J。我们的目标是尽量地简化开发和管理,这通过以下几种途径实现:
㈠ 我们没有编写任何用来初始化Log4J的额外代码。
㈡ 我们让Log4J的JAR文件成为J2EE应用的一部分,因此不需要在应用的EAR文件之外单独地发布和安装Log4J的JAR文件。
㈢ 对于纯Web应用来说,添加Log4J支持不涉及任何额外的管理工作,应用本身能够找到WEB-INF/classes文件夹下面的log4j.properties文件。对于拥有EJB模块的应用,我们必须配置应用服务器的CLASSPATH,使它能够找到log4j.properties文件的位置。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用log4j为Tomcat输出日志
log4j的使用,即java该如何使用日志文件
J2EE环境下的log4j - [Matrix - 与 Java 共舞]
详解slf4j+logback在java工程中的配置
企业开发中选择logback而不是log4j的理由
用myeclipse打jar包,使其包含依赖jar包的指向
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服