Skip to content

Commit 6539d40

Browse files
authored
#Fix: Log4Java broken after refactoring (#42)
* #Fix: Log4Java broken after refactoring - LogManager delay initialization * WebAppStartup base directory * Issue 74643 If the first object that was called after the webapp was started was GXOAuthAccessToken a nullpointer excpetion was throwed when the logger was initialized * In the last commit there was an error in the place that logger was created. * Improved Log Initial configuration * Revert Issue 74643 * Fix android build LogManager. * #Fix: Logger initialization fixes. REST, WS Native. * #Fix: WSHandlerChain log4j error
1 parent debd136 commit 6539d40

File tree

11 files changed

+106
-95
lines changed

11 files changed

+106
-95
lines changed

android/src/main/java/com/genexus/specific/android/LogManager.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@
55

66
public class LogManager implements IExtensionLogManager {
77

8-
@Override
9-
public boolean initialize(String logBasePath) {
10-
return true;
11-
}
12-
138
@Override
149
public ILogger getLogger(Class<?> clazz) {
1510
return new com.genexus.diagnostics.core.provider.AndroidLogger();

common/src/main/java/com/genexus/common/interfaces/IExtensionLogManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
public interface IExtensionLogManager {
66

7-
boolean initialize(String logBasePath);
8-
97
ILogger getLogger(Class<?> clazz);
108

119
ILogger getLogger(String className);

common/src/main/java/com/genexus/diagnostics/core/LogManager.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,6 @@
44

55
public class LogManager {
66

7-
private static boolean _initialized = false;
8-
9-
public static boolean initialize(String logBasePath) {
10-
if (!_initialized)
11-
{
12-
if (SpecificImplementation.LogManager != null)
13-
_initialized = SpecificImplementation.LogManager.initialize(logBasePath);
14-
else
15-
_initialized = true;
16-
}
17-
return _initialized;
18-
}
19-
207
public static ILogger getLogger(final Class<?> clazz) {
218
return SpecificImplementation.LogManager.getLogger(clazz);
229
}

java/src/main/java/com/genexus/Application.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.Properties;
77
import java.util.Vector;
88

9-
import com.genexus.common.interfaces.IPreferences;
109
import com.genexus.db.DBConnectionManager;
1110
import com.genexus.db.DynamicExecute;
1211
import com.genexus.db.Namespace;
@@ -21,13 +20,14 @@
2120
import com.genexus.util.ReorgSubmitThreadPool;
2221
import com.genexus.util.SubmitThreadPool;
2322

23+
2424
public class Application
2525
{
2626
static {
2727
Connect.init();
28-
com.genexus.diagnostics.core.LogManager.initialize(".");
2928
}
30-
public static final ILogger logger = LogManager.getLogger(Application.class);
29+
30+
public static ILogger logger = LogManager.getLogger(Application.class);
3131

3232
public static boolean usingQueue = false;
3333
private static final boolean DEBUG = DebugFlag.DEBUG;
@@ -46,7 +46,8 @@ public class Application
4646
static Class ClassName = null;
4747

4848
private static volatile ExternalProvider externalProvider = null;
49-
49+
private static Object objectLock = new Object();
50+
private static volatile boolean initialized = false;
5051

5152
public static void onExitCleanup()
5253
{
@@ -121,10 +122,6 @@ public static void init(Class gxCfg)
121122
init(gxCfg, true);
122123
}
123124

124-
private static Object objectLock = new Object();
125-
126-
private static volatile boolean initialized = false;
127-
128125
public static void init(Class gxCfg, boolean doLogin)
129126
{
130127
if (!initialized)

java/src/main/java/com/genexus/GxRestService.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
abstract public class GxRestService extends GXWebObjectBase
2424
{
25-
private static final ILogger logger = LogManager.getLogger(GxRestService.class);
25+
private static ILogger logger = null;
2626

2727
protected JSONObject errorJson;
2828
protected boolean error = false;
@@ -59,6 +59,7 @@ public GxRestService()
5959
HttpContext restHttpContext;
6060
public void init(String requestMethod, HttpServletRequest myServletRequest, HttpServletResponse myServletResponse, ServletContext myContext)
6161
{
62+
initLogger(myContext);
6263
try
6364
{
6465
String gxcfg = myContext.getInitParameter("gxcfg");
@@ -83,8 +84,14 @@ public void init(String requestMethod, HttpServletRequest myServletRequest, Http
8384
logger.error("Could not initialize Rest Service", e);
8485
}
8586
}
86-
87-
public void webExecute( )
87+
88+
private void initLogger(ServletContext myContext) {
89+
if (logger == null) {
90+
logger = com.genexus.specific.java.LogManager.initialize(myContext.getRealPath("/"), GxRestService.class);
91+
}
92+
}
93+
94+
public void webExecute( )
8895
{
8996
}
9097

java/src/main/java/com/genexus/specific/java/LogManager.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,34 @@
11
package com.genexus.specific.java;
22

33
import com.genexus.common.interfaces.IExtensionLogManager;
4+
import com.genexus.common.interfaces.SpecificImplementation;
45
import com.genexus.diagnostics.core.ILogger;
56

67
public class LogManager implements IExtensionLogManager {
8+
private static boolean initialized;
79

8-
@Override
9-
public boolean initialize(String logBasePath) {
10-
org.apache.logging.log4j.core.lookup.MapLookup.setMainArguments(new String[] {logBasePath});
10+
static {
11+
configure(".");
12+
}
13+
14+
public static void configure(String logBasePath) {
15+
org.apache.logging.log4j.core.lookup.MapLookup.setMainArguments(new String[]{logBasePath});
1116
//If we do not disable StatusLogger => Log4J throws message logging when log4j.xml is not found
1217
org.apache.logging.log4j.status.StatusLogger.getLogger().setLevel(org.apache.logging.log4j.Level.OFF);
13-
return true;
18+
}
19+
public static void initialize(String logBasePath) {
20+
if (!initialized) {
21+
initialized = true;
22+
configure(logBasePath);
23+
if (SpecificImplementation.LogManager == null) {
24+
SpecificImplementation.LogManager = new LogManager();
25+
}
26+
}
27+
}
28+
29+
public static ILogger initialize(String logBasePath, Class<?> clazz) {
30+
initialize(logBasePath);
31+
return SpecificImplementation.LogManager.getLogger(clazz);
1432
}
1533

1634
@Override

java/src/main/java/com/genexus/webpanels/GXObjectUploadServices.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class GXObjectUploadServices extends GXWebObjectStub
1818
{
1919
protected void doExecute(HttpContext context) throws Exception
2020
{
21-
new WebApplicationStartup().init(Application.gxCfg, context);
21+
WebApplicationStartup.init(Application.gxCfg, context);
2222
context.setStream();
2323

2424
try

java/src/main/java/com/genexus/webpanels/GXWebObjectStub.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616
import com.genexus.security.GXResult;
1717
import com.genexus.security.GXSecurityProvider;
1818

19-
2019
public abstract class GXWebObjectStub extends HttpServlet
2120
{
22-
public static final ILogger logger = LogManager.getLogger(GXWebObjectStub.class);
21+
public static ILogger logger = null;
2322

2423
private static final boolean DEBUG = DebugFlag.DEBUG;
2524

@@ -103,8 +102,8 @@ private void dumpRequestInfo(HttpContext httpContext)
103102

104103
private void callExecute(String method, HttpServletRequest req, HttpServletResponse res) throws ServletException
105104
{
105+
initialize(req, res);
106106
HttpContext httpContext = null;
107-
setResponseBufferSize(res);
108107
try
109108
{
110109
String gxcfg = getServletContext().getInitParameter("gxcfg");
@@ -217,6 +216,13 @@ else if (IntegratedSecurityLevel() == SECURITY_LOW)
217216
}
218217
}
219218

219+
private void initialize(HttpServletRequest req, HttpServletResponse res) {
220+
if (logger == null) {
221+
logger = com.genexus.specific.java.LogManager.initialize(req.getServletContext().getRealPath("/"), GXWebObjectStub.class);
222+
}
223+
setResponseBufferSize(res);
224+
}
225+
220226
private void setResponseBufferSize(HttpServletResponse res) {
221227
Integer bSize = 0;
222228
try {

java/src/main/java/com/genexus/webpanels/ServletEventListener.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.genexus.db.DBConnectionManager;
1313
import com.genexus.db.Namespace;
1414
import com.genexus.platform.NativeFunctions;
15+
import com.genexus.specific.java.LogManager;
1516
import com.genexus.util.GXServices;
1617
import com.genexus.util.PropertiesManager;
1718
import com.genexus.util.SubmitThreadPool;
@@ -79,6 +80,8 @@ public void contextDestroyed(ServletContextEvent event)
7980
public void contextInitialized(ServletContextEvent event)
8081
{
8182
ServletContext context = event.getServletContext();
83+
String basePath = context.getRealPath("/");
84+
LogManager.initialize(basePath);
8285
String gxcfg = context.getInitParameter("gxcfg");
8386
if (gxcfg != null)
8487
{
@@ -87,8 +90,6 @@ public void contextInitialized(ServletContextEvent event)
8790
Class gxcfgClass = Class.forName(gxcfg);
8891
ApplicationContext appContext = ApplicationContext.getInstance();
8992
appContext.setServletEngine(true);
90-
String basePath = context.getRealPath("/");
91-
com.genexus.diagnostics.core.LogManager.initialize(basePath);
9293
appContext.setServletEngineDefaultPath(basePath);
9394
Application.init(gxcfgClass);
9495
}

java/src/main/java/com/genexus/webpanels/WebApplicationStartup.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
import com.genexus.ApplicationContext;
55
import com.genexus.ModelContext;
66
import com.genexus.internet.HttpContext;
7+
import com.genexus.specific.java.LogManager;
78

8-
public class WebApplicationStartup
9+
public class WebApplicationStartup
910
{
10-
static boolean initialized = false;
11+
private static boolean initialized = false;
1112

12-
public void init(Class baseClass, HttpContext httpContext)
13+
public static void init(Class baseClass, HttpContext httpContext)
1314
{
1415
if (!initialized)
1516
{
@@ -18,16 +19,17 @@ public void init(Class baseClass, HttpContext httpContext)
1819
}
1920

2021

21-
private synchronized void initImpl(Class baseClass, HttpContext httpContext)
22+
private static synchronized void initImpl(Class baseClass, HttpContext httpContext)
2223
{
2324
if (!initialized)
24-
{
25+
{
26+
String basePath = httpContext.getDefaultPath();
2527
ApplicationContext appContext = ApplicationContext.getInstance();
2628

2729
appContext.setMsgsToUI(false);
2830
appContext.setServletEngine(true);
29-
appContext.setServletEngineDefaultPath(httpContext.getDefaultPath());
30-
31+
appContext.setServletEngineDefaultPath(basePath);
32+
LogManager.initialize(basePath);
3133
Application.init(baseClass, false);
3234
ModelContext.getModelContext(baseClass).setHttpContext(httpContext);
3335
initialized = true;

0 commit comments

Comments
 (0)