Spring framework 与Jboss Log4j冲突解决Word下载.docx

上传人:b****5 文档编号:17633021 上传时间:2022-12-07 格式:DOCX 页数:10 大小:21.93KB
下载 相关 举报
Spring framework 与Jboss Log4j冲突解决Word下载.docx_第1页
第1页 / 共10页
Spring framework 与Jboss Log4j冲突解决Word下载.docx_第2页
第2页 / 共10页
Spring framework 与Jboss Log4j冲突解决Word下载.docx_第3页
第3页 / 共10页
Spring framework 与Jboss Log4j冲突解决Word下载.docx_第4页
第4页 / 共10页
Spring framework 与Jboss Log4j冲突解决Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Spring framework 与Jboss Log4j冲突解决Word下载.docx

《Spring framework 与Jboss Log4j冲突解决Word下载.docx》由会员分享,可在线阅读,更多相关《Spring framework 与Jboss Log4j冲突解决Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

Spring framework 与Jboss Log4j冲突解决Word下载.docx

needs 

to 

be 

set 

avoid 

possible 

deadlock 

on 

exception 

at 

the

appender 

level. 

See 

bug#696819.

Log4jQuietMode"

true<

How 

frequently 

in 

seconds 

ConfigurationURL 

is 

checked 

for 

changes 

RefreshPeriod"

60<

/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>

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

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}] 

File 

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}] 

log4j.appender.logfile2=org.apache.log4j.DailyRollingFileAppender

log4j.appender.logfile2.File=${LOG_FILE2}

log4j.appender.logfile2.DatePattern='

log4j.appender.logfile2.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile2.layout.ConversionPattern=%-5p:

这里分别定义了两个命名控件:

logfile1对应命名空间(Java代码中的package)org.stephencat.test.*

logfile2对应命名空间org.stephencat.cat.*

6.建立一个用于初始化的InitServlet,配置如下方法:

/**

servlet. 

br>

*

@throws 

ServletException 

if 

an 

error 

occure

*/

public 

void 

init(ServletConfig 

config) 

throws 

{

// 

Put 

your 

code 

here

String 

isRelativePosition 

config.getInitParameter("

relativePosition"

);

logConfiguration 

logConfiguration"

root 

"

;

if(isRelativePosition.equals("

true"

)){

config.getServletContext().getRealPath("

/"

}

PropertyConfigurator.configure(root 

logConfiguration);

在web.xml配置这个Servlet的初始化参数(声明log4j.properties的位置)和启动优先级:

servlet>

description>

This 

description 

my 

J2EE 

component<

/description>

display-name>

display 

name 

/display-name>

servlet-name>

InitServlet<

/servlet-name>

servlet-class>

org.stephencat.test.InitServlet<

/servlet-class>

init-param>

param-name>

relativePosition<

/param-name>

param-value>

/param-value>

/init-param>

logConfiguration<

WEB-INF/log4j.properties<

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)中加入:

Logger.getLogger(Test2Servlet.class.getName());

9.重新启动JBoss,会出现如下错误消息:

11:

53:

21,549 

ERROR 

[STDERR] 

log4j:

org.jboss.logging.appender.FileAppend

er"

object 

not 

assignable 

org.apache.log4j.Appender"

variable.

The 

class 

wa

loaded 

by

[WebappClassLoader

delegate:

false

repositories:

/WEB-INF/classes/

---------->

Parent 

Classloader:

.FactoryURLClassLoader@dcc4e2

whereas 

type

org.jboss.logging.appender.FileAppender

was 

by 

[org.jboss.system.server.NoAnnotationURLClassLoader@a97b0b].

Could 

instantiate 

named 

FI

LE"

.

这是因为自己的log4j.jar与JBoss的log4jService有点冲突,但这段错误消息实际上可以忽略

10.访问以下网址:

http:

//localhost/..../test

//localhost/..../test2

将分别在以下日志文件中输出日志内容:

D:

文件名和物理路径可在log4j.properties中修改。

这个项目打算用jboss做,无论如何,其他的中间件我都用的有点恶心了,听说jboss不错,也想尝试一下新鲜事物,但是刚一开始就出现了一个问题,建立一个简单的web程序,发布,发布地点都已经知晓,但是在启动jboss的时候,发现爆出error错误,如下:

16:

41,884ERROR[STDERR]log4j:

ERRORA"

org.jboss.logging.appender.FileAppender"

objectisnotassignabletoa"

variable.

ERRORTheclass"

wasloadedby 

ERROR[WebappClassLoader

delegate:

false

repositories:

/WEB-INF/classes/

ParentClassloader:

.FactoryURLClassLoader@8aa2d

]whereasobjectoftype 

而相同的项目在tomcat下面是不会报错的,查明原因后发现,原来jboss自己带了日志功能,而建立web项目的时候它自己本身也带着日志功能(你的项目中应该有spring),直接造成冲突。

对于解决办法,下面转载一片文章。

log4j是一个很好的开源的日志项目,下面就我在实际中使用的一些情况作一个小结(我所写的是以spring为框架的运用,之所以要提到这点,是因为在spring中专门有处理log4j的地方,而我也用到了这些地方)。

在使用的第一步你要明白你所发布的web项目所使用的服务器,因为不同的服务器对于使用log4j是有些不同的,我在实际使用中主要是用tomcat和jboss两类,对于tomcat,它本身是没有配置log4j的,所以使用起来和常规的一样;

而在jboss中它是本身配置了log4j的,所以有时候我们在看项目代码时,其整个项目并没有log4j的配置文件,而在一些类中仍然定义了Logger,例如staticLoggerlog=org.apache.log4j.Logger.getLogger(UserDaoImple.class);

,这就表明开发者打算使用jboss默认的log4j的配置,我们可以在jboss下的对应的log目录下的server.log中看到日志,jboss本身的log4j的配置是将debug,info级的日志写在server.log中,而像error等级别比较高的日志打印到控制台上,而写到server.log中的日志比较多,并不方便查看。

于是我们想到使用自己的log4j配置写到某个具体的文件中(注意文件要先建立,才能往里面写东西,log4j自己不能建立文件),但这里因为jboss有它自己的log4j配置,所以如果我们配置的log4j包含Console的Appender时,就会出错,错误类似于

ERROR:

invalidconsoleappenderconfigdetected,consolestreamislooping.

解决方法一是不用Console的Appender,或者改jboss的配置文件,在jboss-service.xml文件里,把

mbeancode="

name="

attributename="

CatchSystemOut"

false<

我建议不用Console的Appender,当然这是对jboss3.2.x是这样,对于jboss4.0.x如果我们要用自己的log4j配置照上述改还是会有问题,会有类似于log4j:

org.jboss.logging.util.OnlyOnceErrorHandler"

org.apache.log4j.spi.ErrorHandler"

variable的异常,解决方法是把/server/default/jbossweb-tomcat55.sar/META-INF/jboss-service.xml中的以下两个熟悉改成true

Java2ClassLoadingCompliance"

UseJBossWebLoader"

以上就是使用jboss服务器可能出现的问题,解决了这些再来使用log4j就比较简单了。

下面说说对于采用了spring框架的项目如何使用log4j,在spring中使用log4j,有些方便的地方,

1.动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下。

2.把log文件定在/WEB-INF/logs/而不需要写绝对路径。

3.可以把log4j.properties和其他properties一起放在/WEB-INF/,而不是Class-Path。

首先我们在web.xml中需要设定一下

context-param>

log4jConfigLocation<

/context-param>

log4jRefreshInterval<

60000<

listener>

listener-class>

org.springframework.web.util.Log4jConfigListener<

/listener-class>

/listener>

其中第二部分就是能够动态修改log4j.properties的关键,容器会每60秒扫描log4j的配置文件 

对于log4j的配置文件如何写,这就不多说了,大家可以去google,有一点就是我们如果用RollingFileAppender或者FileAppender时,可以通过${webapp.root}来定位到服务器的发布的该项目下,这是spring把web目录的路径压入到了webapp.root的系统变量。

然后,在log4j.properties里就可以这样定义logfile位置 

log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log 

如果有多个web应用,怕webapp.root变量重复,可以在context-param里定义webAppRootKey。

当我们定义完log4j.properties后,剩下的就是在需要记录的class中new出Logger了 

常用log4j配置

常用log4j配置,一般可以采用两种方式,.properties和.xml,下面举两个简单的例子:

一、log4j.properties

###设置org.zblog域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1,A2##

log4j.category.org.zblog=ERROR,A1 

log4j.category.org.zblog=INFO,A2 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 

###设置输出地A1,为ConsoleAppender(控制台)##

log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

###设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式)##

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-ddHH:

ss,SSS}[%c]-[%p]%m%n 

###配置日志输出的格式##

log4j.appender.A2=org.apache.log4j.RollingFileAppender 

###设置输出地A2到文件(文件大小到达指定尺寸的时候产生一个新的文件)##

log4j.appender.A2.File=E:

/study/log4j/zhuwei.html 

###文件位置##

log4j.appender.A2.MaxFileSize=500KB 

###文件大小##

log4j.appender.A2.MaxBackupIndex=1 

log4j.append

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1