加入收藏
|
设为首页
|
会员中心
|
我要投稿
|
RSS
首页
阅读中心
下载中心
影视频道
网上商城
FLASH频道
图片频道
文章中心
分类信息
网站建设
您当前的位置:
首页
>
阅读中心
>
软件学习
理解类加载器:J2EE 环境下的 log4j
时间:2014-05-04 10:04:14 来源:不详 作者:佚名
大纲
Log4j是一个很流行的
提供非常灵活的控制。它可
格式。而这一切都不需要改
日志记录工具。根据java项目不
以对输出信息进行分级控制。也
变源程序。
同的日志需求和调试需求。他可以
可以在运行时改变输出信息的表现
Log4j用三个对象来控
的layouts(样式)将日志
配置文件。(指定外部配置
载进来,也可能在运行的时
制日志的记录。Logger,append
记录到appenders中。在这个操
文件也是最好的一种方式)。这
候被改变。
ers,和layouts。logger会以特定
作过程中常常需要指定具体的外部
些配置信息会在你的应用开始时加
在使用log4j的时候将会用到以下这些步骤:
1.写配置文件,在文件中需要:
• 指定root logger的级别并且和一个appender绑定
• 指定appender的属性
• 为appender指定一个layout
2.在你的代码中,需要
根据class或name得到一个logge
r.典型的一种做法是将logger
与当前的类的进行关联。
3.用你从第二步得到的logger的任
何一种方法(log.debug(),log.info(),log.warn
(),log.error())进行写日志。
设置安装
在这本书的例子是运行在weblogic 7
产品(如jboss)是因为weblogic为在项
的应用服务器。自从我发表的之前的文章
是暗示推荐使用weblogic。这只是提供一
.0 sp2 demo上。我们之所以用weblogic代替开源的
目组中配置log4j提出了更多的挑战。它也是最流行
。我收的绝大多数问题都是关于它的。但是这里决不
个测试环境。说明在j2ee环境下如何配置log4j
Weblogic的设置安装
Weblogic7.0sp2可以从
必须要在bea上面进行一些
有别的选择。你可以选择免
BEA's trial page下载。选择你
个人信息的注册。而且下载的文
费的测试CD
需要的版本类型进行下载。注意你
件很巨大。大约有150M。当然你也
如果你得到了安装文件。安装就很简
。我们的测试环境选择典型安装。当安装
yes然后就会运行Domain的配置向导。第
为Domain的类型,给它起个名字叫mydoma
server(standalone server).再下一屏选
进行配置。然后一路next就可以了。最后
以admin作为管理员帐号,password最为
注册成windows的services(在windows环
始菜单上方置快捷方式。最后点击create
单了。你只需要按照安装向导一步一步安装就可以了
到最后,安装向导会问你是否需要配置Domain.选择
一屏、选择Domain的类型和名字。选择WLSDomain作
in.第二屏、设置server的类型为单一
择缺省路径做为Domain的路径,再点击next为server
需要你为domain输入管理员帐号和密码。我一般就是
密码(很原始的做法)。接下来选择是否将service
境下安装),一般选择no。最后选择yes在windows开
建立Domain.
运行weblogic就很简单了。从开始菜单Start->All Programs->BEA WebLogic Platform 7.0->User Projects->mydomain->Start Server这样可以启动server.不过更常用的方式是从dos命令行,进入BEA的HOME目录。进入user_projectsmydomain后,运行startWebLogic.cmd.就可以了。启动的时候会要求你输入管理员帐号和密码。最后你可以看到server开始启动。当你看到Server start in running mode表示启动成功。如果要关闭你只要关闭Dos窗口就可以了。
如果你安装运行成功。
你会进入webogic的管理界
管理员帐号和密码。就和启
以执行相应的管理任务。
你可以在浏览器中输入如下地址
面。你可以对applications和se
动时输入的一样。进入后你可以
http://localhost:7001/console.
rver进行各种配置。当然你要输入
看到各种管理任务的界面。你也可
log4j的安装
和前面提到的一样。Lo
和安装log4j的二进制代码
g4j可以从log4j web site.下载
。在这章最后我们会介绍log4j
。请按照前面的文章介绍进行下载
的配置。
类加载器的概念有什么不一样。
虽然有关类加载器的讨
如何影响应用服务器中log4
论在本文以外已经有很多了。但
j的配置的。
是我还是尽力解释一下类加载器是
类加载器。顾名思义,表示在java虚
前。它必须通过类加载器加载使之有效。
加载到java虚拟机。但是类加载器本事就
载器呢。
拟机中加载calsses.在我们的class执行和被访问之
给定一个class名字,类加载器会定位class并且将它
是class。这就带来一个问题。是谁来加载这些类加
当你运行一个java程序。(例如在命
地的native java launcher(我叫他java
是指针对你的平台和运行环境而言。这个
的名字叫做bootstrap 类加载器.(引导类
关。而且它不是用java写成的。这个引导
令行内输入java命令),它就会执行并且启动一个本
启动者,估计不太准确注明一下)。这里本地的意思
本地的java启动者包含一个类加载器,这个类加载器
加载器).这个引导类加载器.是本地的和你的环境有
类加载器的主要功能是加载java的核心类。
Figure 1; 类加载器 委托层次
Java虚拟机缺省会执行
器和application(应用)类
导类加载器会加载java的核
java核心类(例如:javax.
用类加载器会加载你应用下
其他两个类加载器.引导类加载
加载器到内存中。这些都是用ja
心类(例如:java.util包下的
包下的类,或者是在运行环境中
的各种class文件。
器会加载extension(扩展)类加载
va写成的。和前面提到的一样。引
类)。扩展类加载器会加载扩展的
类路径ext目录下的java类。)应
所有三种类加载器都遵
务委托给父一级类加载器.
扩展类加载器.而扩展类加
个核心类。那么引导类加载
。这个请求就会返回到扩展
载器会先让它的父一级的类
子一级的类加载器为它自己
循委托模式。当低一级的类加载
当你的应用需要一个特殊的类。
载器又会将这个任务委托个引导
器会将这个类加载,使你可以使
类加载器.最后在返回到应用类
加载器搜索需要的类。只有当父
搜索所需的类。
器需要定位一个类。它会将这个任
应用类加载器会将这个任务委托给
类加载器.。如果你请求的类是一
用这个类。但是如果找不到这个类
加载器.这样的做法就使每个类加
一级的类加载器没有找到。才会让
在应用服务器当中,每一个独立部署
情况下,这也是weblogic的处理方式)。
载特定的ejb和web应用。(注意一点,当
合,这时候只会有一个类加载器,不会再
有webapp和ejb所需要的类包。当然首先
。它可以加载也可以卸载类包。但它有一
应用进行热部署。
的web应用和EJB都会取得属于自己的类加载器(正常
这种类加载器来源于应用类加载器.它们主要用来加
我们的web应用打包成ear文件――ejb和webapps的混
分成ejb和webapp两种)这种新的类加载器会加载所
这些类包不存在于java核心类中和扩展类中(ext)
种缺省类加载器所没有的特性。这个特性就是可以对
当weblogic启动的时候
运行环境。然后它会启动特
.java的应用类加载器会为
的应用的类加载器是不可见
。
。它会用java提供的应用类加载
定的类加载器.这种特定的类加
特定的类加载器加载相应的clas
。因此。一个特定应用所加载的
器加载相应的类。并且构造相应的
载器来源于java的应用类加载器
ses.这种特定的类加载器对于其他
classes.对于其他应用是不可见的
Figure 2: 特定的应用 类加载器
那么我们如何使一个单
把这个类方在weblogic中cl
器会自动把类加载到内存中
点也很明显。首先你失去了
任何变化意味着server必须
些类。所以当你采用这种方
独的类对所有的应用都起作用呢
asspath里面。当weblogic启动
去。所有的子应用都是可以访问
在所有特定应用中对指定类进行
从新启动。因为没有一种机制可
法的时候你要权衡一下得失。
。只有使用上层的类加载器.可以
的时候。缺省的java 应用类加载
到这个类的。但是。这中方法的缺
热部署的能力。第二、这些类发生
以让java应用类加载器从新加载这
对你的j2ee应用来说,Log4j是一种
前面提到一种建议是。将它放到weblogic
。不太建议使用这种方法。但是在j2ee环
加载的classes而有一些自己的特点(ejb
使用的相同类加载器加载ejb和webapp.下
扩展类库。那么我们应该把这个类库放到那里去呢。
启动时的classpath中。但是前面也讲到了它的缺点
境下配置log4j会因为ejb无法得知由webapp类加载器
和webapp用的类加载器不相同)。除非你的包和应用
面我为说明这一点举个例子。
我们会在我们安装的we
常简单的ejb。当它被调用
blogic中部署一个非常简单的应
的时候会返回”hello world”
用它包括jsp和ejb.这个ejb是个非
Example: Why Doesn't It Work?
例子:“它为什么不工作。“
让我们用weblogic 的控制台安装.wa
们想要安装ejb的.jar文件的时候。我们
r文件和。Ejb的.jar(EJB .jar file)文件。当我
会发现org.apache.log4j.logger找不到的错误。
Ejb的.jar文件无法从
为ejb和webapp使用的是不
.ear file)。我们还是得
中使用相同的类加载器。我
与它相对应的webapp的目录下的
的类加载器.甚至是我们将ejb和
到错误信息。这是为什么?即使
们还没有告诉我们的ejb去那里
web-inf目录得到log4j的消息。因
webapp打包到同一个ear文件中(
我们将ejb和webapp打包到ear文件
访问log4j.jar文件。
Example: Why It Will Work
例子:为什么它工作了。
这里有个升级后可以工
作的ear文件(updated .ear fi
le)让我们看看都做了那些改动。
• 我将log4j.jar文件从webap
ejb.jar文件平级。这
p的lib目录下面一移到了外层目录。与.war和
样使得.jar文件对ejb来讲是可见的。
• 我更改的Ejb
log4j.jar的classpath
.jar文件中的Manifest.mf,增
加一个条目,使他包含了指向
(Class-Path: log4j.jar)
这些更改已经可以使我们将这个应用
没有出错信息了。因为现在ejb可以访问l
器.它为整个应用加载类库和classes。在
决对log4j.jar文件的依赖和加载。Webap
录的外边。因为他们用的是同一个类加载
部署到weblogic上。当我们用控制台部署的时候已经
og4j。对于loa4jDemoEar2这个应用只有一个类加载
EJB中的.mf文件中添加的classpath条目主要用来解
p也可以访问到log4j.jar.即使我们将它移到了lib目
器。
对于一个j2ee环境采用的策略
根据你的需求。我建议如下策略。你
署扩展的classes的应用。
会发现这不仅仅与log4j相关。而适用于所有需要部
• 如果你的clas
web-info/lib这个目录。
ses仅仅被你的webapplication
使用。那么把它部署到
• 如果你的web
的classpath条目。指明需
、ejb.jar放在同一层次。
署。
应用和ejb都需要这个classes。
要的classes。并且将classes放
这样你的ejb和webapp都可以访
那么在你的ejb的.mf文件增加相应
到ear文件中的最上一层。和.war
问这个classes而不需要反复的部
结论
如果你不清出类加载器的工作方式。
子下面“机制。对成功部署j2ee应用非常
classes.
J2ee的打包工作就会变的非常繁琐。清楚的了解“帽
重要。它会帮助部署工程师明确自己如何连接这些
Log4j在j2ee环境下的工作没有什么不同。只是需要能够进行正确的配置。
来顶一下
返回首页
发表评论
共有
条评论
用户名:
密码:
验证码:
匿名发表
推荐资讯
后牧工业区厂房1500平
现实的童话公主艾米·
科比专为大场面而生
“最美清洁工”原是《
相关文章
无相关信息
栏目更新
栏目热门
站内搜索:
新闻
下载
图库
FLASH
电影
商品
文章
分类信息
高级搜索
网站首页
|
关于我们
|
服务条款
|
广告服务
|
联系我们
|
网站地图
|
免责声明
|
WAP
服务专员1
技术支持
SunC
Soft
© 2002-2013
SunC