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 找到
把 resource:log4j.xml 改为 resource:jboss-log4j.xml
3. 在自己的应用程序的 WEB-INF 目录中添加一个 jboss-web.xml 内容如下
4. 把 log4j.jar 加到 build-path 中
5. 在自己的应用程序的 WEB-INF 目录中添加一个 log4j.properties 内容如下:
这里分别定义了两个命名控件:
logfile1 对应命名空间(Java 代码中的 package)org.stephencat.test.*
logfile2 对应命名空间 org.stephencat.cat.*
6. 建立一个用于初始化的 InitServlet ,配置如下方法:
在 web.xml 配置这个 Servlet 的初始化参数(声明 log4j.properties 的位置)和启动优先级:
7. 在 org.stephencat.test.TestServlet (映射为 /test)中加入:
8. 在 org.stephencat.cat.Test2Servlet(映射为 /test2)中加入:
9. 重新启动 JBoss ,会出现如下错误消息:
这是因为自己的 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 中修改。
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 中修改。