'log4j2 logs are not writing into log file after initialization of application
I have migrated legacy application log4j version from 1.2.X to 2.17.X version. Below steps I followed in local windows WebLogic server and it works fine loading testlog4j2.xml and writing logs into log file while invocation of application.
When deployed same code on Linux WebLogic hosted test server the log file created during WebLogic server starts later application invocation logs are not rolling into the log file.
Please advise any one faced same situation and how it resolved? Local and Test environment using same version of WebLogic server wls 12.2.1.4
Code Snippet for local(windows) and test environment(Linux):
package com.test.log.web;
import java.io.File;
import java.net.URL;
import java.util.Date;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import com.test.logs.util.LOGConstants;
public class Log4jInitServlet extends HttpServlet {
private static final long serialVersionUID = -508914566049243013L;
private final static Logger LOG = LogManager
.getLogger(Log4jInitServlet.class.getName());
public Log4jInitServlet() {
}
public void init() {
try {
String initFile = getInitParameter("log4j-init-file");
String log4jPathLocal = System.getProperty("log4jPathLocal","-Dlog4jPathLocal Not Set");
String log4jPathVM = System.getProperty("log4jPathVM", "-Dlog4jPathVM Not Set");
String env = System.getProperty("env", LOGConstants.DEFAULT_ENV);
String loggingdir= System.getProperty("loggingdir", "-Dloggingdir Not Set");
File logFile = new File(System.getProperty("loggingdir", "-Dloggingdir Not Set"));
System.setProperty("loggingdir", logFile.getPath());
URL url = getServletContext().getResource(initFile);
File file = null;
LoggerContext loggerContext = (LoggerContext)LogManager.getContext(false);
if(env.equalsIgnoreCase("LOCAL")) {
if(!log4jPathLocal.equalsIgnoreCase("-Dlog4jPathLocal Not Set")) {
file = new File(log4jPathLocal+"testlog4j2.xml");
loggerContext.setConfigLocation(file.toURI());
System.out.println("testlog4j2.xml From "+log4jPathLocal);
LOG.info("testlog4j2.xml From "+log4jPathLocal);
}
}else {
if(!log4jPathVM.equalsIgnoreCase("-Dlog4jPathVM Not Set")) {
file = new File(log4jPathVM+"testlog4j2.xml");
loggerContext.setConfigLocation(file.toURI());
System.out.println("testlog4j2.xml From "+log4jPathVM);
LOG.info("testlog4j2.xml From "+log4jPathVM);
}
}
LOG.info(" ");
LOG.info("Application Parameters - J2EE Application Server");
LOG.info("loggingdir: " +loggingdir);
LOG.info("Environment " + env);
LOG.info("log4jPathLocal: "+log4jPathLocal);
LOG.info("log4jPathVM: "+log4jPathVM);
LOG.info("Runtime Memory: " + Runtime.getRuntime().totalMemory()
+ ", Free: " + Runtime.getRuntime().freeMemory());
LOG.info(" ");
LOG.info("Initialization started at " + new Date() + "...");
} catch (Exception ex) {
System.out.println("\n\nLog4jInitServlet\n\n EXCEPTION");
ex.printStackTrace();
}
}
public void doGet(HttpServletRequest httpservletrequest,
HttpServletResponse httpservletresponse) {
}
}
Local environment variables setting in startWebLogic.cmd
set JAVA_OPTIONS=%JAVA_OPTIONS% -Denv=LOCAL
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4jPathLocal=C:\wls12214\user_projects\domains\testdomain\properties\log4j\
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dloggingdir=C:/app-log
Test environment variables setting in startWebLogic.sh
JAVA_OPTIONS=%JAVA_OPTIONS% -Denv=TEST
JAVA_OPTIONS=%JAVA_OPTIONS% -Dlog4jPathVM=/opt/weblogic/wls12/domains/testdomain/properties/log4j/
JAVA_OPTIONS=%JAVA_OPTIONS% -Dloggingdir=/var/opt/weblogic/logs/wls12/testdomain/testserver/app-log
testlog4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%t] %c:%L %m%n</Property>
<Property name="log-path">${sys:loggingdir}</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}" />
</Console>
<RollingFile name="appLog"
fileName="${sys:loggingdir}/Test.log"
filePattern="${sys:loggingdir}/Test-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="25 MB" />
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="${sys:loggingdir}/" maxDepth="2">
<IfFileName glob="Test*" />
<IfLastModified age="P30D" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.test.log" level="trace" additivity="false">
<AppenderRef ref="appLog" />
<AppenderRef ref="Console" />
</Logger>
<Root level="all">
<AppenderRef ref="Console" level="trace" />
<AppenderRef ref="appLog" level="error" />
</Root>
</Loggers>
</Configuration>
jars used for this migration
- log4j-api-2.17.2.jar
- log4j-core-2.17.2.jar
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
