dhaval
dhaval

Reputation: 7659

log4j with liferay and tomcat

I have a Liferay setup on the Tomcat6. I used Log4j initially for portlets/webapps by adding log4j.properties file in the classes folder and log4j.jar file in the web-inf/lib.

Now we have few quartz jobs which are available in the tomcat/lib folder and I want to enable log4j logging for these jobs as well.

For these quartz jobs I have copied same log4j.properties file in the tomcat/lib.

With the new configuration I keep getting the following error:

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

How to remove this error?

Is there any way I can keep a single log4j.properties file which can be used by both shared/lib as well as portlet/webapps.

Upvotes: 2

Views: 3619

Answers (2)

mvmn
mvmn

Reputation: 4047

Known issue in Liferay: http://issues.liferay.com/browse/LPS-9376

In my case, the problem occurred once I started to use ServiceBuilder services, and added Log4J Logger to one of my ...LocalServiceImpl classes. Once I removed Log4J logging from there everything got back to norm - exception disappeared.

(I made service methods throw exceptions, and was catching them in a code not related to ServiceBuilder read/generated classes, but it could also be done by changing Log4J logger calls to Liferay's LogUtil calls).

Upvotes: 1

mico
mico

Reputation: 12738

According to this post the problem is that you have configured your log4j twice.

My solution would be that you create the logger instance like this

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

and not to have log4j.properties under any lib or class folder but having it under a folder named resources.

AFAIK this should be a place where the both parts of your application may have access to.

Upvotes: 1

Related Questions