2011-04-19 42 views
2

我有一个Tomcat6上的Liferay设置。我通过在web-inf/lib的classes文件夹和log4j.jar文件中添加log4j.properties文件,最初将Log4j用于portlet/webapps。log4j与liferay和tomcat

现在我们有几个在tomcat/lib文件夹中可用的石英作业,我也想为这些作业启用log4j日志记录。

对于这些石英作业,我在tomcat/lib中复制了相同的log4j.properties文件。

用新的配置我不断收到以下错误:

Could not instantiate appender named "JOBS" 
A "org.apache.log4j.RollingFileAppender" is not assignable a "org.apache.log4j.Appender" variable. 
The class "org.apache.log4j.Appender" was loaded by ... 

如何消除这种错误?

有什么办法可以保存一个log4j.properties文件,它可以被shared/lib以及portlet/webapps使用。

回答

1

根据this post问题是你已经配置了你的log4j两次。

我的解决办法是,你创建一个这样

private static Logger logger = Logger.getLogger(FooBar.class.getName());

的记录器实例,而不是有任何lib或类文件夹下log4j.properties,但有一个名为resources文件夹下吧。

AFAIK这应该是你的应用程序的这两个部分可以访问的地方。在Liferay中

+0

您提到的'resources'文件夹是一个新的文件夹,在'[Portlet Dir]/docroot/WEB-IF/src'或其他地方创建?另外,是否在每个portlet的“WEB-INF/lib”下包含log4j.jar? – yannicuLar 2013-07-03 10:58:40

+1

http://www.mkyong.com/spring/quick-start-maven-spring-example/告诉属性文件的位置。 http://www.liferay.com/web/brett.swaim/blog/-/blogs/using-log4j-to-ensure-each-portlet-has-it-s-own-log-file是Liferay的解决方案,与我有所不同,但告诉了罐子的位置。如果没有Liferay,可以将它们放到WEB-INF/lib中,如http://kaushalksinha.blogspot.fi/2009/10/adding-log4j-logging-to-portlet.html所示。希望这给了更多的见解。 – mico 2013-07-03 16:44:34

1

已知问题:http://issues.liferay.com/browse/LPS-9376

在我的情况,出现问题的,一旦我开始使用ServiceBuilder服务,并添加Log4J的记录仪到我的... LocalServiceImpl类之一。 一旦我从那里删除Log4J日志记录,一切恢复正常 - 异常消失。 (我使服务方法抛出异常,并且在与ServiceBuilder读取/生成的类无关的代码中捕获它们,但它也可以通过将Log4J记录器调用更改为Liferay的LogUtil调用来完成)。

+1

我不是在插件环境中开发的,所以这不可能是可能的解决方案。不过谢谢你的回答,这可能对我有些帮助。 – dhaval 2011-06-13 11:52:12