1414 * See the License for the specific language governing permissions and
1515 * limitations under the License.
1616 */
17- package org .apache .logging .log4j .core .test . util ;
17+ package org .apache .logging .log4j .core .util . internal ;
1818
1919import static java .util .concurrent .TimeUnit .MILLISECONDS ;
2020import static java .util .concurrent .TimeUnit .SECONDS ;
3434import java .util .concurrent .Executors ;
3535import org .apache .logging .log4j .core .Logger ;
3636import org .apache .logging .log4j .core .LoggerContext ;
37- import org .apache .logging .log4j .core .util .internal .InternalLoggerRegistry ;
3837import org .apache .logging .log4j .message .MessageFactory ;
3938import org .apache .logging .log4j .message .SimpleMessageFactory ;
4039import org .junit .jupiter .api .AfterEach ;
@@ -71,23 +70,23 @@ void testGetLoggerReturnsNullForNonExistentLogger() {
7170 @ Test
7271 void testComputeIfAbsentCreatesLogger () {
7372 Logger logger = registry .computeIfAbsent (
74- "testLogger" , messageFactory , (name , factory ) -> loggerContext . getLogger ( name , factory ));
73+ "testLogger" , messageFactory , (name , factory ) -> new MockLogger ( loggerContext , name , factory ));
7574 assertNotNull (logger );
7675 assertEquals ("testLogger" , logger .getName ());
7776 }
7877
7978 @ Test
8079 void testGetLoggerRetrievesExistingLogger () {
8180 Logger logger = registry .computeIfAbsent (
82- "testLogger" , messageFactory , (name , factory ) -> loggerContext . getLogger ( name , factory ));
81+ "testLogger" , messageFactory , (name , factory ) -> new MockLogger ( loggerContext , name , factory ));
8382 assertSame (logger , registry .getLogger ("testLogger" , messageFactory ));
8483 }
8584
8685 @ Test
8786 void testHasLoggerReturnsCorrectStatus () {
8887 assertFalse (registry .hasLogger ("testLogger" , messageFactory ));
8988 registry .computeIfAbsent (
90- "testLogger" , messageFactory , (name , factory ) -> loggerContext . getLogger ( name , factory ));
89+ "testLogger" , messageFactory , (name , factory ) -> new MockLogger ( loggerContext , name , factory ));
9190 assertTrue (registry .hasLogger ("testLogger" , messageFactory ));
9291 }
9392
@@ -98,15 +97,17 @@ void testExpungeStaleWeakReferenceEntries() {
9897
9998 for (int i = 0 ; i < numberOfLoggers ; i ++) {
10099 Logger logger = registry .computeIfAbsent (
101- loggerNamePrefix + i , messageFactory , (name , factory ) -> loggerContext .getLogger (name , factory ));
100+ loggerNamePrefix + i ,
101+ messageFactory ,
102+ (name , factory ) -> new MockLogger (loggerContext , name , factory ));
102103 logger .info ("Using logger {}" , logger .getName ());
103104 }
104105
105106 await ().atMost (10 , SECONDS ).pollInterval (100 , MILLISECONDS ).untilAsserted (() -> {
106107 System .gc ();
107108 System .runFinalization ();
108109 registry .computeIfAbsent (
109- "triggerExpunge" , messageFactory , (name , factory ) -> loggerContext . getLogger ( name , factory ));
110+ "triggerExpunge" , messageFactory , (name , factory ) -> new MockLogger ( loggerContext , name , factory ));
110111
111112 Map <MessageFactory , Map <String , WeakReference <Logger >>> loggerRefByNameByMessageFactory =
112113 reflectAndGetLoggerMapFromRegistry ();
@@ -127,20 +128,21 @@ void testExpungeStaleWeakReferenceEntries() {
127128
128129 @ Test
129130 void testExpungeStaleMessageFactoryEntry () {
131+ SimpleMessageFactory mockMessageFactory = new SimpleMessageFactory ();
130132 Logger logger = registry .computeIfAbsent (
131- "testLogger" , messageFactory , (name , factory ) -> loggerContext . getLogger ( name , factory ));
133+ "testLogger" , mockMessageFactory , (name , factory ) -> new MockLogger ( loggerContext , name , factory ));
132134 logger .info ("Using logger {}" , logger .getName ());
133135 logger = null ;
134136
135137 await ().atMost (10 , SECONDS ).pollInterval (100 , MILLISECONDS ).untilAsserted (() -> {
136138 System .gc ();
137139 System .runFinalization ();
138- registry .getLogger ("testLogger " , messageFactory );
140+ registry .getLogger ("triggerExpunge " , mockMessageFactory );
139141
140142 Map <MessageFactory , Map <String , WeakReference <Logger >>> loggerRefByNameByMessageFactory =
141143 reflectAndGetLoggerMapFromRegistry ();
142144 assertNull (
143- loggerRefByNameByMessageFactory .get (messageFactory ),
145+ loggerRefByNameByMessageFactory .get (mockMessageFactory ),
144146 "Stale MessageFactory entry was not removed from the outer map" );
145147 });
146148 }
@@ -154,7 +156,7 @@ void testConcurrentAccess() throws InterruptedException {
154156 for (int i = 0 ; i < threadCount ; i ++) {
155157 executor .submit (() -> {
156158 registry .computeIfAbsent (
157- "testLogger" , messageFactory , (name , factory ) -> loggerContext . getLogger ( name , factory ));
159+ "testLogger" , messageFactory , (name , factory ) -> new MockLogger ( loggerContext , name , factory ));
158160 latch .countDown ();
159161 });
160162 }
@@ -177,4 +179,11 @@ private Map<MessageFactory, Map<String, WeakReference<Logger>>> reflectAndGetLog
177179 (Map <MessageFactory , Map <String , WeakReference <Logger >>>) loggerMapField .get (registry );
178180 return loggerMap ;
179181 }
182+
183+ private class MockLogger extends Logger {
184+
185+ protected MockLogger (LoggerContext context , String name , MessageFactory messageFactory ) {
186+ super (context , name , messageFactory );
187+ }
188+ }
180189}
0 commit comments