JBoss配置学习(二):日志(Log4j) Log4j是一种日志记录工具包,起有如下几个比较重要的概念
1.日志级别分为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF,譬如如果调用org.apache.log4j.Logger.debug(msg),那么只有当系统的日志级别小于等于DEBUG(即ALL或者DEBUG)时,该信息才会输出
2.日志追加器(Appender):日志追加器定义了日志信息以什么样的格式写到哪里,主要有ConsoleAppender和FileAppender,前者以System.out的方式输出,后者则以文件的格式输出,自定义的Appender必须实现rg.apache.log4j.Appender接口
3.日志分类(Category):日志可以对不同的分类配置不同的日志级别和日志追加器,一般以做日志记录的类的包名为日志分类,日志分类存在父子关系,譬如对于一个类ayufox.jboss.eclipse.Bootstrap进行日志,则日志分类ayufox和ayufox.jboss都对其起作用,其中ayfuox.jboss覆盖ayufox的配置,就如同ayufox.jboss继承了ayufox,ayufox.jboss的行为覆盖ayufox一样
Log4j的使用比较简单,如下
Logger logger = LogManager.getLogger(myClass);
logger.debug(...)
logger.warn(...)
JBoss使用Log4j完成日志记录的任务,见$JBOSS_HOME/server/all/config/jboss-service.xml(以all服务实例为例,下面不再强调)
[code]
<mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging" xmbean-dd="resource:xmdesc/Log4jService-xmbean.xml">
<attribute name="ConfigurationURL">resource:log4j.xml</attribute>
<attribute name="Log4jQuietMode">true</attribute>
<attribute name="RefreshPeriod">60</attribute>
</mbean>
[/code]
从ConfigurationURL,可以知道log4j的配置文件为$JBOSS_HOME/server/all/config/log4j.xml,详细配置的理解可以参考该文件和log4j的文档,在这里举例说明,假设我们对jms服务器端的行为做进一步了解,我们可以让其打印出更多的调试信息,则在log4j.xml中配置如下
[code]
<category name="org.jboss.mx">
<priority value="DEBUG" />
<appender-ref ref="CONSOLE"/>
</category>
[/code]我的BLOG: http://ayufox.blogcn.com
1.日志级别分为:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF,譬如如果调用org.apache.log4j.Logger.debug(msg),那么只有当系统的日志级别小于等于DEBUG(即ALL或者DEBUG)时,该信息才会输出
2.日志追加器(Appender):日志追加器定义了日志信息以什么样的格式写到哪里,主要有ConsoleAppender和FileAppender,前者以System.out的方式输出,后者则以文件的格式输出,自定义的Appender必须实现rg.apache.log4j.Appender接口
3.日志分类(Category):日志可以对不同的分类配置不同的日志级别和日志追加器,一般以做日志记录的类的包名为日志分类,日志分类存在父子关系,譬如对于一个类ayufox.jboss.eclipse.Bootstrap进行日志,则日志分类ayufox和ayufox.jboss都对其起作用,其中ayfuox.jboss覆盖ayufox的配置,就如同ayufox.jboss继承了ayufox,ayufox.jboss的行为覆盖ayufox一样
Log4j的使用比较简单,如下
Logger logger = LogManager.getLogger(myClass);
logger.debug(...)
logger.warn(...)
JBoss使用Log4j完成日志记录的任务,见$JBOSS_HOME/server/all/config/jboss-service.xml(以all服务实例为例,下面不再强调)
[code]
<mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging" xmbean-dd="resource:xmdesc/Log4jService-xmbean.xml">
<attribute name="ConfigurationURL">resource:log4j.xml</attribute>
<attribute name="Log4jQuietMode">true</attribute>
<attribute name="RefreshPeriod">60</attribute>
</mbean>
[/code]
从ConfigurationURL,可以知道log4j的配置文件为$JBOSS_HOME/server/all/config/log4j.xml,详细配置的理解可以参考该文件和log4j的文档,在这里举例说明,假设我们对jms服务器端的行为做进一步了解,我们可以让其打印出更多的调试信息,则在log4j.xml中配置如下
[code]
<category name="org.jboss.mx">
<priority value="DEBUG" />
<appender-ref ref="CONSOLE"/>
</category>
[/code]我的BLOG: http://ayufox.blogcn.com
解决方案 »
- spring和struts2结合后,到底是谁生产了action?
- sql group by 问题,谁能帮小弟解决一下
- web.xml 配置问题?
- 请问用Hibernate怎么调用存储过程,最好给段代码,谢谢
- 求 jive 2.6.4(开 源 的 最 后 版 本 )的 源 代 码
- 高分求解!请大家受点累看一看,可能对大家有帮助!
- 100分悬红寻解 分不够再加 在线等待
- 求教....
- ps = conn.prepareStatement(str2)前,ps是否一定要close??????
- jb7+weblogic+mysql,但jb7老是连不上数据库。,错误如下。。
- 复杂的form表单提交,请求解答.急.....
- Weblogic使用JDBC新手问题--JDBC driver is not on the CLASSPATH
JNDI的API包位于javax.naming下最主要的类是Context和InitContext,其提供了向命名服务提供者注册、取消注册和获得注册对象的功能,譬如EJB的扩展组件可能就会在启动时将加载EJB包并解析Bean和向命名服务提供注册,而客户端根据注册名向命名服务请求获得EJB的HOME对象。
JBoss的命名服务包括三种,远程命名服务、本地命名服务和本地ENC,其名字分别以任意、java:和java:comp开头:远程命名服务和本地命名服务的名字必须在整个服务器实例中唯一,远程目录可以通过远程访问,即客户端和服务提供端位于不同的JVM,譬如一个远程HOME接口;而本地命名服务仅可以通过本地访问,即客户端和服务位于同一个服务器实例,譬如JBOSS提供的数据源;而ENC意思是Enterprise Naming Context,其名字在同一个环境中唯一,譬如不同的应用(两个不同的Web应用)其名字可以是一样的,譬如在EJB配置中(如下),可以通过java:com/env/ejb/hello来获得该EJB,其也仅可以在同一个应用实例中访问
[code]
<ejb-ref>
<ejb-ref-name>ejb/hello</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>ayufox.ejb.test.HelloHome</home>
<remote>ayufox.ejb.test.HelloObject</remote>
<ejb-link>hello</ejb-link>
</ejb-ref>
[/code]
1.服务器端配置1
命名服务JBoss提供的配置如下$JBOSS_HOME/server/all/config/jboss-service.xml
[code]
<mbean code="org.jboss.naming.NamingService" name="jboss:service=Naming" xmbeandd="resource:xmdesc/NamingService-xmbean.xml">
<attribute name="CallByValue">false</attribute>
<attribute name="Port">1099</attribute>
<attribute name="BindAddress">${jboss.bind.address}</attribute>
<attribute name="RmiPort">1098</attribute>
<attribute name="RmiBindAddress">${jboss.bind.address}</attribute>
<depends optional-attribute-name="LookupPool" proxy-type="attribute">jboss.system:service=ThreadPool</depends>
</mbean>
[/code]
各个参数意义自明,不再解释,其中BindAddress是因为有些服务器有多个网卡具有多个IP,可以通过指定某一个IP则仅向该IP访问才有效,可以通过配置该bean来改变JNDI访问端口等。
2.服务器端配置2
$JBOSS_HOME/server/all/config/jdni.properties(一般不需要重新配置)
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
3.远程客户端配置:
在运行环境路径下配置jdni.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
4.测试代码
1)获得所有远程命名对象
[code]
InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> ne = ctx.list("java:");
while (ne.hasMoreElements())
{
NameClassPair cp = ne.next();
System.out.println(cp.getName());
}
[/code]
2)获得远程HOME接口
[code]
Context ctx = new InitialContext();
Object ref = ctx.lookup("java:/ejb/hello");
[/code]
就是我设了smtp="smtp.126.com"的话我全个项目中都能通过访问smtp得到它的值