|
24 | 24 | import com.alipay.sofa.common.log.factory.LoggerSpaceFactory4Log4jBuilder;
|
25 | 25 | import com.alipay.sofa.common.log.factory.LoggerSpaceFactory4LogbackBuilder;
|
26 | 26 | import com.alipay.sofa.common.log.factory.LoggerSpaceFactoryBuilder;
|
| 27 | +import com.alipay.sofa.common.log.proxy.TemporaryILoggerFactoryPool; |
27 | 28 | import com.alipay.sofa.common.space.SpaceId;
|
28 | 29 | import com.alipay.sofa.common.utils.ClassLoaderUtil;
|
29 | 30 | import com.alipay.sofa.common.utils.ReportUtil;
|
@@ -111,12 +112,7 @@ static void doInit(String spaceName, Map<String, String> props, ClassLoader spac
|
111 | 112 | */
|
112 | 113 | static void doInit(SpaceId spaceId, Map<String, String> props, ClassLoader spaceClassloader) {
|
113 | 114 | LogSpace logSpace = new LogSpace(props, spaceClassloader);
|
114 |
| - |
115 |
| - AbstractLoggerSpaceFactory loggerSpaceFactory = createILoggerFactory(spaceId, logSpace, |
116 |
| - spaceClassloader); |
117 |
| - logSpace.setAbstractLoggerSpaceFactory(loggerSpaceFactory); |
118 |
| - |
119 |
| - LOG_FACTORY_MAP.put(spaceId, logSpace); |
| 115 | + LOG_FACTORY_MAP.putIfAbsent(spaceId, logSpace); |
120 | 116 | }
|
121 | 117 |
|
122 | 118 | /**
|
@@ -187,11 +183,24 @@ public static Logger getLoggerBySpace(String name, com.alipay.sofa.common.log.Sp
|
187 | 183 | private static AbstractLoggerSpaceFactory getILoggerFactoryBySpaceName(SpaceId spaceId,
|
188 | 184 | ClassLoader spaceClassloader) {
|
189 | 185 | if (!isSpaceInitialized(spaceId)) {
|
190 |
| - // If get logger without initializing, log space will be initialized with empty config map |
191 |
| - init(spaceId, null, spaceClassloader); |
| 186 | + return TemporaryILoggerFactoryPool.get(spaceId, spaceClassloader); |
192 | 187 | }
|
193 | 188 |
|
194 |
| - return LOG_FACTORY_MAP.get(spaceId).getAbstractLoggerSpaceFactory(); |
| 189 | + AbstractLoggerSpaceFactory factory = NOP_LOGGER_FACTORY; |
| 190 | + LogSpace space = LOG_FACTORY_MAP.get(spaceId); |
| 191 | + if (!isSpaceILoggerFactoryExisted(spaceId)) { |
| 192 | + synchronized (space) { |
| 193 | + if (!isSpaceILoggerFactoryExisted(spaceId)) { |
| 194 | + factory = createILoggerFactory(spaceId, space, spaceClassloader); |
| 195 | + space.setAbstractLoggerSpaceFactory(factory); |
| 196 | + } |
| 197 | + } |
| 198 | + } else { |
| 199 | + factory = LOG_FACTORY_MAP.get(spaceId).getAbstractLoggerSpaceFactory(); |
| 200 | + } |
| 201 | + |
| 202 | + |
| 203 | + return factory; |
195 | 204 | }
|
196 | 205 |
|
197 | 206 | public static Logger setLoggerLevel(String loggerName, String spaceName,
|
@@ -258,6 +267,11 @@ public static boolean isSpaceInitialized(com.alipay.sofa.common.log.SpaceId spac
|
258 | 267 | return LOG_FACTORY_MAP.containsKey(spaceId);
|
259 | 268 | }
|
260 | 269 |
|
| 270 | + private static boolean isSpaceILoggerFactoryExisted(SpaceId spaceId) { |
| 271 | + return isSpaceInitialized(spaceId) |
| 272 | + && LOG_FACTORY_MAP.get(spaceId).getAbstractLoggerSpaceFactory() != null; |
| 273 | + } |
| 274 | + |
261 | 275 | @Deprecated
|
262 | 276 | public static Map getSpacesMap() {
|
263 | 277 | return Collections.emptyMap();
|
|
0 commit comments