1212import java .util .Hashtable ;
1313import java .util .Map ;
1414import java .util .Set ;
15+
16+ import org .apache .log4j .JBossLogManagerFacade ;
1517import org .jboss .logmanager .ExtLogRecord ;
18+ import org .jboss .logmanager .LogContext ;
1619import org .jboss .modules .Module ;
1720
1821import org .apache .log4j .Category ;
@@ -74,6 +77,7 @@ public class LoggingEvent implements Serializable {
7477 public final transient String fqnOfCategoryClass ;
7578 public transient Priority level ;
7679
80+ private transient final org .jboss .logmanager .LogContext logContext ;
7781 private transient Category logger ;
7882
7983 //// Private fields
@@ -104,6 +108,7 @@ public LoggingEvent(String fqnOfCategoryClass, Category logger, Priority level,
104108 logRecord .setThrown (throwable );
105109 }
106110 logRecord .setMillis (timeStamp = System .currentTimeMillis ());
111+ logContext = null ;
107112 }
108113
109114 public LoggingEvent (String fqnOfCategoryClass , Category logger , long timeStamp , Priority level , Object message , Throwable throwable ) {
@@ -120,6 +125,7 @@ public LoggingEvent(String fqnOfCategoryClass, Category logger, long timeStamp,
120125 logRecord .setThrown (throwable );
121126 }
122127 logRecord .setMillis (this .timeStamp = timeStamp );
128+ logContext = null ;
123129 }
124130
125131 public LoggingEvent (final String fqnOfCategoryClass , final Category logger , final long timeStamp , final Level level , final Object message , final String threadName , final ThrowableInformation throwable , final String ndc , final LocationInfo info , final java .util .Map properties ) {
@@ -157,17 +163,29 @@ public LoggingEvent(final String fqnOfCategoryClass, final Category logger, fina
157163 if (properties != null ) {
158164 logRecord .setMdc (properties );
159165 }
166+ logContext = null ;
160167 }
161168
162- // our own constructor
169+ // our own constructors
163170
171+ // This one is for testing only!
164172 public LoggingEvent (final ExtLogRecord logRecord , final Category logger ) {
165173 this .logRecord = logRecord ;
166174 fqnOfCategoryClass = logRecord .getLoggerClassName ();
167175 this .logger = logger ;
168176 level = JBossLevelMapping .getPriorityFor (logRecord .getLevel ());
169177 categoryName = logRecord .getLoggerName ();
170178 timeStamp = logRecord .getMillis ();
179+ logContext = null ;
180+ }
181+
182+ public LoggingEvent (final ExtLogRecord logRecord , final LogContext logContext ) {
183+ this .logRecord = logRecord ;
184+ fqnOfCategoryClass = logRecord .getLoggerClassName ();
185+ level = JBossLevelMapping .getPriorityFor (logRecord .getLevel ());
186+ categoryName = logRecord .getLoggerName ();
187+ timeStamp = logRecord .getMillis ();
188+ this .logContext = logContext ;
171189 }
172190
173191 public LocationInfo getLocationInformation () {
@@ -186,6 +204,12 @@ public String getLoggerName() {
186204 }
187205
188206 public Category getLogger () {
207+ Category logger = this .logger ;
208+ if (logger == null ) {
209+ // lazily populate
210+ assert logContext != null ; // otherwise, our `logger` would be populated per constructor
211+ logger = this .logger = JBossLogManagerFacade .getLogger (logContext .getLogger (categoryName ));
212+ }
189213 return logger ;
190214 }
191215
0 commit comments