While trying to create a poorman's auditing system with Liferay 7 I ran into some challenges. So to prevent you make the same mistakes you can learn from my mistakes.
First you need to create a portal-log4j-ext.xml that will be used to override portal-log4j.xml Mine looks like this but yours might be totally different:
<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="XML_FILE" class="org.apache.log4j.varia.NullAppender"/>
<appender class="org.apache.log4j.ConsoleAppender" name="CONSOLE">
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t][%c{1}:%L] %m%n"/>
</layout>
</appender>
<appender class="org.apache.log4j.rolling.RollingFileAppender" name="TEXT_FILE">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="@liferay.home@/logs/[email protected]@.%d{yyyy-MM-dd}.log"/>
</rollingPolicy>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t][%c{1}:%L] %m%n"/>
</layout>
</appender>
<appender class="org.apache.log4j.rolling.RollingFileAppender" name="AUDIT_FILE">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="@liferay.home@/logs/[email protected]@.%d{yyyy-MM-dd}.log"/>
</rollingPolicy>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t][%c{1}:%L] %m%n"/>
</layout>
</appender>
<category name="com.liferay.demo.googleauthenticator.portlet.action.audit">
<priority value="ERROR"/>
<appender-ref ref="AUDIT_FILE"/>
</category>
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="TEXT_FILE"/>
<!-- <appender-ref ref="XML_FILE" /> -->
</root>
</log4j:configuration>
As you can see I turned off XML logging and added a custom AUDIT logfile for my specific use-case. If you quickly want to generate a file from the original portal-log4j.xml you can use:
cd tomcat/webapps/ROOT/WEB-INF
unzip -p lib/portal-impl.jar META-INF/portal-log4j.xml > /tmp/portal-log4j-ext.xml
Now, where it all went wrong.
I tend to keep my custom files in separate directory or in the liferay-home.
In my case this is /opt/liferay
.
To enable the override you must put the portal-log4j-ext.xml
in tomcat/webapps/ROOT/WEB-INFclasses/META-INF/
.
And this is where it went wrong. I used a softlink from /opt/liferay
in the META-INF
directory but this didn't work.
Turns out you can use a hardlink like ln /opt/liferay/portal-log4j-ext.xml /opt/liferay/tomcat/webapps/ROOT/WEB-INFclasses/META-INF/portal-log4j-ext.xml
and when you restart it will pick up the override.
Took me a while to understand why it didn't work but hey, you are the lucky one ;-)