public static ThreadContextMap createThreadContextMap() { final ClassLoader cl = ProviderUtil.findClassLoader(); ThreadContextMap result = null; if (ThreadContextMapName != null) { if (result == null && ProviderUtil.hasProviders() && LogManager.getFactory() != null) { //LOG4J2-1658 final String factoryClassName = LogManager.getFactory().getClass().getName(); for (final Provider provider : ProviderUtil.getProviders()) { if (factoryClassName.equals(provider.getClassName())) { final Class<? extends ThreadContextMap> clazz = provider.loadThreadContextMap();
/** * Lazily initializes the ProviderUtil singleton. * * @since 2.1 */ protected static void lazyInit() { // noinspection DoubleCheckedLocking if (instance == null) { try { STARTUP_LOCK.lockInterruptibly(); try { if (instance == null) { instance = new ProviderUtil(); } } finally { STARTUP_LOCK.unlock(); } } catch (final InterruptedException e) { LOGGER.fatal("Interrupted before Log4j Providers could be loaded.", e); Thread.currentThread().interrupt(); } } }
private void loadProvider(final BundleContext bundleContext, final BundleWiring bundleWiring) { final String filter = "(APIVersion>=2.6.0)"; try { final Collection<ServiceReference<Provider>> serviceReferences = bundleContext.getServiceReferences(Provider.class, filter); Provider maxProvider = null; for (final ServiceReference<Provider> serviceReference : serviceReferences) { final Provider provider = bundleContext.getService(serviceReference); if (maxProvider == null || provider.getPriority() > maxProvider.getPriority()) { maxProvider = provider; } } if (maxProvider != null) { ProviderUtil.addProvider(maxProvider); } } catch (final InvalidSyntaxException ex) { LOGGER.error("Invalid service filter: " + filter, ex); } final List<URL> urls = bundleWiring.findEntries("META-INF", "log4j-provider.properties", 0); for (final URL url : urls) { ProviderUtil.loadProvider(url, bundleWiring.getClassLoader()); } }
private ProviderUtil() { for (ClassLoader classLoader : LoaderUtil.getClassLoaders()) { try { loadProviders(classLoader); } catch (Throwable ex) { LOGGER.debug("Unable to retrieve provider from ClassLoader {}", classLoader, ex); } } for (final LoaderUtil.UrlResource resource : LoaderUtil.findUrlResources(PROVIDER_RESOURCE)) { loadProvider(resource.getUrl(), resource.getClassLoader()); } }
private ProviderUtil() { loadProviders(findClassLoader()); for (final LoaderUtil.UrlResource resource : LoaderUtil.findUrlResources(PROVIDER_RESOURCE)) { loadProvider(resource.getUrl(), resource.getClassLoader()); } }
public static Iterable<Provider> getProviders() { lazyInit(); return PROVIDERS; }
/** * * @param classLoader null can be used to mark the bootstrap class loader. */ protected static void loadProviders(final ClassLoader classLoader) { final ServiceLoader<Provider> serviceLoader = ServiceLoader.load(Provider.class, classLoader); for (final Provider provider : serviceLoader) { if (validVersion(provider.getVersions()) && !PROVIDERS.contains(provider)) { PROVIDERS.add(provider); } } }
AtomicBoolean logWarning = new AtomicBoolean(false); initialized.updateAndGet(initialized -> { if (!initialized && !ProviderUtil.hasProviders()) { noLogger.set(true); logWarning.set(true);
/** * @deprecated Use {@link #loadProvider(java.net.URL, ClassLoader)} instead. Will be removed in 3.0. */ @Deprecated protected static void loadProviders(final Enumeration<URL> urls, final ClassLoader cl) { if (urls != null) { while (urls.hasMoreElements()) { loadProvider(urls.nextElement(), cl); } } }
public static boolean hasProviders() { lazyInit(); return !PROVIDERS.isEmpty(); }
/** * Loads an individual Provider implementation. This method is really only useful for the OSGi bundle activator and * this class itself. * * @param url the URL to the provider properties file * @param cl the ClassLoader to load the provider classes with */ protected static void loadProvider(final URL url, final ClassLoader cl) { try { final Properties props = PropertiesUtil.loadClose(url.openStream(), url); if (validVersion(props.getProperty(API_VERSION))) { final Provider provider = new Provider(props, url, cl); PROVIDERS.add(provider); LOGGER.debug("Loaded Provider {}", provider); } } catch (final IOException e) { LOGGER.error("Unable to open {}", url, e); } }
/** * @deprecated Use {@link #loadProvider(java.net.URL, ClassLoader)} instead. Will be removed in 3.0. */ @Deprecated protected static void loadProviders(final Enumeration<URL> urls, final ClassLoader cl) { if (urls != null) { while (urls.hasMoreElements()) { loadProvider(urls.nextElement(), cl); } } }
public static ThreadContextMap createThreadContextMap() { final PropertiesUtil managerProps = PropertiesUtil.getProperties(); final String threadContextMapName = managerProps.getStringProperty(THREAD_CONTEXT_KEY); final ClassLoader cl = ProviderUtil.findClassLoader(); ThreadContextMap result = null; if (threadContextMapName != null) { if (result == null && ProviderUtil.hasProviders() && LogManager.getFactory() != null) { //LOG4J2-1658 final String factoryClassName = LogManager.getFactory().getClass().getName(); for (final Provider provider : ProviderUtil.getProviders()) { if (factoryClassName.equals(provider.getClassName())) { final Class<? extends ThreadContextMap> clazz = provider.loadThreadContextMap();
private void loadProvider(final BundleContext context, final BundleWiring bundleWiring) { final String filter = "(APIVersion>=2.60)"; try { final Collection<ServiceReference<Provider>> serviceReferences = context.getServiceReferences(Provider.class, filter); Provider maxProvider = null; for (final ServiceReference<Provider> serviceReference : serviceReferences) { final Provider provider = context.getService(serviceReference); if (maxProvider == null || provider.getPriority() > maxProvider.getPriority()) { maxProvider = provider; } } if (maxProvider != null) { ProviderUtil.addProvider(maxProvider); } } catch (final InvalidSyntaxException ex) { LOGGER.error("Invalid service filter: " + filter, ex); } final List<URL> urls = bundleWiring.findEntries("META-INF", "log4j-provider.properties", 0); for (final URL url : urls) { ProviderUtil.loadProvider(url, bundleWiring.getClassLoader()); } }
public static Iterable<Provider> getProviders() { lazyInit(); return PROVIDERS; }
protected static void loadProviders(final ClassLoader cl) { final ServiceLoader<Provider> serviceLoader = ServiceLoader.load(Provider.class, cl); for (final Provider provider : serviceLoader) { if (validVersion(provider.getVersions())) { PROVIDERS.add(provider); } } }
/** * Lazily initializes the ProviderUtil singleton. * * @since 2.1 */ protected static void lazyInit() { // noinspection DoubleCheckedLocking if (instance == null) { try { STARTUP_LOCK.lockInterruptibly(); try { if (instance == null) { instance = new ProviderUtil(); } } finally { STARTUP_LOCK.unlock(); } } catch (final InterruptedException e) { LOGGER.fatal("Interrupted before Log4j Providers could be loaded.", e); Thread.currentThread().interrupt(); } } }
public static boolean hasProviders() { lazyInit(); return !PROVIDERS.isEmpty(); }
/** * Loads an individual Provider implementation. This method is really only useful for the OSGi bundle activator and * this class itself. * * @param url the URL to the provider properties file * @param cl the ClassLoader to load the provider classes with */ protected static void loadProvider(final URL url, final ClassLoader cl) { try { final Properties props = PropertiesUtil.loadClose(url.openStream(), url); if (validVersion(props.getProperty(API_VERSION))) { final Provider provider = new Provider(props, url, cl); PROVIDERS.add(provider); LOGGER.debug("Loaded Provider {}", provider); } } catch (final IOException e) { LOGGER.error("Unable to open {}", url, e); } }