1. 把 D:\jboss-4.0.5.GA\server\default\conf 里面的 log4j.xml 改名为 jboss-log4j.xml
2. 编辑 D:\jboss-4.0.5.GA\server\default\conf 里面的 jboss-service.xml 找到
<!--
====================================================================
-->
<!-- Log4j Initialization -->
<!-- ==================================================================== -->
< 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 >
<!-- Set the org.apache.log4j.helpers.LogLog.setQuiteMode. As of log4j1.2.8
this needs to be set to avoid a possible deadlock on exception at the
appender level. See bug#696819.
-->
< attribute name ="Log4jQuietMode" > true </ attribute >
<!-- How frequently in seconds the ConfigurationURL is checked for changes -->
< attribute name ="RefreshPeriod" > 60 </ attribute >
</ mbean >
<!-- Log4j Initialization -->
<!-- ==================================================================== -->
< 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 >
<!-- Set the org.apache.log4j.helpers.LogLog.setQuiteMode. As of log4j1.2.8
this needs to be set to avoid a possible deadlock on exception at the
appender level. See bug#696819.
-->
< attribute name ="Log4jQuietMode" > true </ attribute >
<!-- How frequently in seconds the ConfigurationURL is checked for changes -->
< attribute name ="RefreshPeriod" > 60 </ attribute >
</ mbean >
把 resource:log4j.xml 改为 resource:jboss-log4j.xml
3. 在自己的应用程序的 WEB-INF 目录中添加一个 jboss-web.xml 内容如下
<?
xml version="1.0" encoding="UTF-8"
?>
< jboss-web >
< class-loading java2ClassLoadingCompliance ="false" >
< loader-repository >
ConfigTest:loader=ConfigTest.war
< loader-repository-config > java2ParentDelegation=false
</ loader-repository-config >
</ loader-repository >
</ class-loading >
</ jboss-web >
< jboss-web >
< class-loading java2ClassLoadingCompliance ="false" >
< loader-repository >
ConfigTest:loader=ConfigTest.war
< loader-repository-config > java2ParentDelegation=false
</ loader-repository-config >
</ loader-repository >
</ class-loading >
</ jboss-web >
4. 把 log4j.jar 加到 build-path 中
5. 在自己的应用程序的 WEB-INF 目录中添加一个 log4j.properties 内容如下:
#Global variable definition
LOG_LEVEL = DEBUG
LOG_FILE1 = D:/jboss- 4.0.5 .GA/server/default/log/configtest1.log
LOG_FILE2 = D:/jboss- 4.0.5 .GA/server/default/log/configtest2.log
# com.microsoft Logger
log4j.logger.org.stephencat.test = ${LOG_LEVEL} , logfile1
log4j.additivity.org.stephencat.test = false
# com.microsoft Logger
log4j.logger.org.stephencat.cat = ${LOG_LEVEL} , logfile2
log4j.additivity.org.stephencat.cat = false
# Console Appender Definition
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %c(%t) %x:%m%n
#log4j.appender.stdout.layout.ConversionPattern = %-5p: [ %d{MM/dd HH:mm:ss,SSS} ] %c(%t) %x:%m%n
# File Appender Definition
log4j.appender.logfile1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile1.File = ${LOG_FILE1}
log4j.appender.logfile1.DatePattern = '.'yyyy-MM-dd
log4j.appender.logfile1.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile1.layout.ConversionPattern = %-5p: [ %d{ISO8601} ] %c(%t) %x:%m%n
# File Appender Definition
log4j.appender.logfile2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile2.File = ${LOG_FILE2}
log4j.appender.logfile2.DatePattern = '.'yyyy-MM-dd
log4j.appender.logfile2.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile2.layout.ConversionPattern = %-5p: [ %d{ISO8601} ] %c(%t) %x:%m%n
LOG_LEVEL = DEBUG
LOG_FILE1 = D:/jboss- 4.0.5 .GA/server/default/log/configtest1.log
LOG_FILE2 = D:/jboss- 4.0.5 .GA/server/default/log/configtest2.log
# com.microsoft Logger
log4j.logger.org.stephencat.test = ${LOG_LEVEL} , logfile1
log4j.additivity.org.stephencat.test = false
# com.microsoft Logger
log4j.logger.org.stephencat.cat = ${LOG_LEVEL} , logfile2
log4j.additivity.org.stephencat.cat = false
# Console Appender Definition
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %c(%t) %x:%m%n
#log4j.appender.stdout.layout.ConversionPattern = %-5p: [ %d{MM/dd HH:mm:ss,SSS} ] %c(%t) %x:%m%n
# File Appender Definition
log4j.appender.logfile1 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile1.File = ${LOG_FILE1}
log4j.appender.logfile1.DatePattern = '.'yyyy-MM-dd
log4j.appender.logfile1.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile1.layout.ConversionPattern = %-5p: [ %d{ISO8601} ] %c(%t) %x:%m%n
# File Appender Definition
log4j.appender.logfile2 = org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile2.File = ${LOG_FILE2}
log4j.appender.logfile2.DatePattern = '.'yyyy-MM-dd
log4j.appender.logfile2.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile2.layout.ConversionPattern = %-5p: [ %d{ISO8601} ] %c(%t) %x:%m%n
这里分别定义了两个命名控件:
logfile1 对应命名空间(Java 代码中的 package)org.stephencat.test.*
logfile2 对应命名空间 org.stephencat.cat.*
6. 建立一个用于初始化的 InitServlet ,配置如下方法:
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init(ServletConfig config) throws ServletException {
// Put your code here
String isRelativePosition = config.getInitParameter( " relativePosition " );
String logConfiguration = config.getInitParameter( " logConfiguration " );
String root = "" ;
if (isRelativePosition.equals( " true " )){
root = config.getServletContext().getRealPath( " / " );
}
PropertyConfigurator.configure(root + logConfiguration);
}
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occure
*/
public void init(ServletConfig config) throws ServletException {
// Put your code here
String isRelativePosition = config.getInitParameter( " relativePosition " );
String logConfiguration = config.getInitParameter( " logConfiguration " );
String root = "" ;
if (isRelativePosition.equals( " true " )){
root = config.getServletContext().getRealPath( " / " );
}
PropertyConfigurator.configure(root + logConfiguration);
}
在 web.xml 配置这个 Servlet 的初始化参数(声明 log4j.properties 的位置)和启动优先级:
<
servlet
>
< description > This is the description of my J2EE component </ description >
< display-name > This is the display name of my J2EE component </ display-name >
< servlet-name > InitServlet </ servlet-name >
< servlet-class > org.stephencat.test.InitServlet </ servlet-class >
< init-param >
< param-name > relativePosition </ param-name >
< param-value > true </ param-value >
</ init-param >
< init-param >
< param-name > logConfiguration </ param-name >
< param-value > WEB-INF/log4j.properties </ param-value >
</ init-param >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
< description > This is the description of my J2EE component </ description >
< display-name > This is the display name of my J2EE component </ display-name >
< servlet-name > InitServlet </ servlet-name >
< servlet-class > org.stephencat.test.InitServlet </ servlet-class >
< init-param >
< param-name > relativePosition </ param-name >
< param-value > true </ param-value >
</ init-param >
< init-param >
< param-name > logConfiguration </ param-name >
< param-value > WEB-INF/log4j.properties </ param-value >
</ init-param >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
7. 在 org.stephencat.test.TestServlet (映射为 /test)中加入:
static
Logger log
=
Logger.getLogger(TestServlet.
class
.getName());
8. 在 org.stephencat.cat.Test2Servlet(映射为 /test2)中加入:
static
Logger log
=
Logger.getLogger(Test2Servlet.
class
.getName());
9. 重新启动 JBoss ,会出现如下错误消息:
11
:
53
:
21
,
549
ERROR
[
STDERR
]
log4j:ERROR A
"
org.jboss.logging.appender.FileAppend
er " object is not assignable to a " org.apache.log4j.Appender " variable.
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR The class " org.apache.log4j.Appender " wa
s loaded by
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR [ WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@dcc4e2
] whereas object of type
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR " org.jboss.logging.appender.FileAppender
" was loaded by [ org.jboss.system.server.NoAnnotationURLClassLoader@a97b0b ] .
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR Could not instantiate appender named " FI
LE " .
er " object is not assignable to a " org.apache.log4j.Appender " variable.
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR The class " org.apache.log4j.Appender " wa
s loaded by
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR [ WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@dcc4e2
] whereas object of type
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR " org.jboss.logging.appender.FileAppender
" was loaded by [ org.jboss.system.server.NoAnnotationURLClassLoader@a97b0b ] .
11 : 53 : 21 , 549 ERROR [ STDERR ] log4j:ERROR Could not instantiate appender named " FI
LE " .
这是因为自己的 log4j.jar 与 JBoss 的 log4jService 有点冲突,但这段错误消息实际上可以忽略
10. 访问以下网址:
http://localhost/..../test
http://localhost/..../test2
将分别在以下日志文件中输出日志内容:
D:/jboss- 4.0.5 .GA/server/default/log/configtest1.log
D:/jboss-4.0.5.GA/server/default/log/configtest2.log
文件名和物理路径可在 log4j.properties 中修改。