From a8faa94d154a2d4aa286fe57a61eff57e1dcd8b8 Mon Sep 17 00:00:00 2001
From: Damian Ujma <92095156+damianujma@users.noreply.github.com>
Date: Fri, 13 Dec 2024 10:11:04 +0100
Subject: [PATCH] ACS-9074 Bump log4j to 2.24.2 (#3087)
* ACS-9023 Bump log4j to 2.24.2
* ACS-9074 Update license header
---
pom.xml | 2 +-
.../repo/admin/Log4JHierarchyInit.java | 394 +++++++++---------
2 files changed, 200 insertions(+), 196 deletions(-)
diff --git a/pom.xml b/pom.xml
index b7b6e35da4..75d1f5768e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
3.1-HTTPCLIENT-1265
2.12.2
2.0.16
- 2.23.1
+ 2.24.2
3.0.23
2.9.2
7.7.10
diff --git a/repository/src/main/java/org/alfresco/repo/admin/Log4JHierarchyInit.java b/repository/src/main/java/org/alfresco/repo/admin/Log4JHierarchyInit.java
index 81d809f4dc..4ec6cb956c 100644
--- a/repository/src/main/java/org/alfresco/repo/admin/Log4JHierarchyInit.java
+++ b/repository/src/main/java/org/alfresco/repo/admin/Log4JHierarchyInit.java
@@ -1,195 +1,199 @@
-/*
- * #%L
- * Alfresco Repository
- * %%
- * Copyright (C) 2005 - 2022 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
-package org.alfresco.repo.admin;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.properties.PropertiesConfiguration;
-import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationBuilder;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-
-/**
- * Initialises Log4j's HierarchyDynamicMBean (refer to core-services-context.xml) and any overriding log4.properties files.
- * The actual implementation uses introspection to avoid any hard-coded references to Log4J classes. If Log4J is
- * not present, this class will do nothing.
- *
- * Alfresco modules can provide their own log4j2.properties file, which augments/overrides the global log4j2.properties
- * within the Alfresco webapp. Within the module's source tree, suppose you create:
- *
- * config/alfresco/module/{module.id}/log4j2.properties
- *
- * At deployment time, this log4j2.properties file will be placed in:
- *
- * WEB-INF/classes/alfresco/module/{module.id}/log4j2.properties
- *
- * Where {module.id} is whatever value is set within the AMP's module.properties file. For details, see: Developing an Alfresco Module
- *
- * For example, if {module.id} is "org.alfresco.module.someModule", then within your source code you'll have:
- *
- *
- * config / alfresco / module / org.alfresco.module.someModule / log4j2.properties
- *
- *
- * This would be deployed to:
- *
- * WEB - INF / classes / alfresco / module / org.alfresco.module.someModule / log4j2.properties
- *
- */
-public class Log4JHierarchyInit implements ApplicationContextAware
-{
- private static final Log LOGGER = LogFactory.getLog(Log4JHierarchyInit.class);
- private final List extraLog4jUrls;
- private ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
-
- public Log4JHierarchyInit()
- {
- extraLog4jUrls = new ArrayList<>();
- }
-
- /**
- * Loads a set of augmenting/overriding log4j2.properties files from locations specified via an array of Spring URLS.
- *
- * This function supports Spring's syntax for retrieving multiple class path resources with the same name,
- * via the "classpath*:" prefix. For details, see: {@link PathMatchingResourcePatternResolver}.
- */
- public void setExtraLog4jUrls(List urls)
- {
- extraLog4jUrls.addAll(urls);
- }
-
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
- {
- this.resolver = applicationContext;
- }
-
- public void init()
- {
- importLogSettings();
- }
-
- private void importLogSettings()
- {
- try
- {
- Properties mainProperties = new Properties();
-
- importMainLogSettings(mainProperties);
- for (String url : extraLog4jUrls)
- {
- importLogSettings(url, mainProperties);
- }
-
- PropertiesConfiguration propertiesConfiguration = new PropertiesConfigurationBuilder()
- .setConfigurationSource(null)
- .setRootProperties(mainProperties)
- .setLoggerContext((LoggerContext) LogManager.getContext(false))
- .build();
-
- propertiesConfiguration.initialize();
- ((LoggerContext) LogManager.getContext(false)).reconfigure(propertiesConfiguration);
- }
- catch (Throwable t)
- {
- if (LOGGER.isDebugEnabled())
- {
- LOGGER.debug("Failed to add extra Logger configuration: \n" + " Error: " + t.getMessage(), t);
- }
- }
-
- }
-
- private static void importMainLogSettings(Properties mainProperties) throws IOException
- {
- File file = ((LoggerContext) LogManager.getContext()).getConfiguration().getConfigurationSource().getFile();
- if (file != null)
- {
- try (FileInputStream fis = new FileInputStream(file))
- {
- mainProperties.load(fis);
- }
- catch (FileNotFoundException e)
- {
- if (LOGGER.isDebugEnabled())
- {
- LOGGER.debug("Failed to find initial configuration: \n" + " Error: " + e.getMessage(), e);
- }
- }
- }
- }
-
- private void importLogSettings(String springUrl, Properties mainProperties)
- {
- Resource[] resources = null;
-
- try
- {
- resources = resolver.getResources(springUrl);
- }
- catch (Exception e)
- {
- LOGGER.warn("Failed to find additional Logger configuration: " + springUrl);
- }
-
- // Read each resource
- for (Resource resource : resources)
- {
- try
- {
- InputStream inputStream = resource.getInputStream();
- Properties properties = new Properties();
- properties.load(inputStream);
- mainProperties.putAll(properties);
- }
- catch (Throwable e)
- {
- if (LOGGER.isDebugEnabled())
- {
- LOGGER.debug("Failed to add extra Logger configuration: \n" + " URL: " + springUrl + "\n"
- + " Error: " + e.getMessage(), e);
- }
- }
- }
- }
-
-}
\ No newline at end of file
+/*
+ * #%L
+ * Alfresco Repository
+ * %%
+ * Copyright (C) 2005 - 2024 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.repo.admin;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.properties.PropertiesConfiguration;
+import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationBuilder;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+
+/**
+ * Initialises Log4j's HierarchyDynamicMBean (refer to core-services-context.xml) and any overriding log4.properties files. The actual implementation uses introspection to avoid any hard-coded references to Log4J classes. If Log4J is not present, this class will do nothing.
+ *
+ * Alfresco modules can provide their own log4j2.properties file, which augments/overrides the global log4j2.properties within the Alfresco webapp. Within the module's source tree, suppose you create:
+ *
+ *
+ * config/alfresco/module/{module.id}/log4j2.properties
+ *
+ *
+ * At deployment time, this log4j2.properties file will be placed in:
+ *
+ *
+ * WEB-INF/classes/alfresco/module/{module.id}/log4j2.properties
+ *
+ *
+ * Where {module.id} is whatever value is set within the AMP's module.properties file. For details, see: Developing an Alfresco Module
+ *
+ * For example, if {module.id} is "org.alfresco.module.someModule", then within your source code you'll have:
+ *
+ *
+ * config / alfresco / module / org.alfresco.module.someModule / log4j2.properties
+ *
+ *
+ * This would be deployed to:
+ *
+ *
+ * WEB - INF / classes / alfresco / module / org.alfresco.module.someModule / log4j2.properties
+ *
+ */
+public class Log4JHierarchyInit implements ApplicationContextAware
+{
+ private static final Log LOGGER = LogFactory.getLog(Log4JHierarchyInit.class);
+ private final List extraLog4jUrls;
+ private ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+
+ static
+ {
+ System.setProperty("log4j2.disableJmx", "false");
+ }
+
+ public Log4JHierarchyInit()
+ {
+ extraLog4jUrls = new ArrayList<>();
+ }
+
+ /**
+ * Loads a set of augmenting/overriding log4j2.properties files from locations specified via an array of Spring URLS.
+ *
+ * This function supports Spring's syntax for retrieving multiple class path resources with the same name, via the "classpath*:" prefix. For details, see: {@link PathMatchingResourcePatternResolver}.
+ */
+ public void setExtraLog4jUrls(List urls)
+ {
+ extraLog4jUrls.addAll(urls);
+ }
+
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
+ {
+ this.resolver = applicationContext;
+ }
+
+ public void init()
+ {
+ importLogSettings();
+ }
+
+ private void importLogSettings()
+ {
+ try
+ {
+ Properties mainProperties = new Properties();
+
+ importMainLogSettings(mainProperties);
+ for (String url : extraLog4jUrls)
+ {
+ importLogSettings(url, mainProperties);
+ }
+
+ PropertiesConfiguration propertiesConfiguration = new PropertiesConfigurationBuilder()
+ .setConfigurationSource(null)
+ .setRootProperties(mainProperties)
+ .setLoggerContext((LoggerContext) LogManager.getContext(false))
+ .build();
+
+ propertiesConfiguration.initialize();
+ ((LoggerContext) LogManager.getContext(false)).reconfigure(propertiesConfiguration);
+ }
+ catch (Throwable t)
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Failed to add extra Logger configuration: \n" + " Error: " + t.getMessage(), t);
+ }
+ }
+
+ }
+
+ private static void importMainLogSettings(Properties mainProperties) throws IOException
+ {
+ File file = ((LoggerContext) LogManager.getContext()).getConfiguration().getConfigurationSource().getFile();
+ if (file != null)
+ {
+ try (FileInputStream fis = new FileInputStream(file))
+ {
+ mainProperties.load(fis);
+ }
+ catch (FileNotFoundException e)
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Failed to find initial configuration: \n" + " Error: " + e.getMessage(), e);
+ }
+ }
+ }
+ }
+
+ private void importLogSettings(String springUrl, Properties mainProperties)
+ {
+ Resource[] resources = null;
+
+ try
+ {
+ resources = resolver.getResources(springUrl);
+ }
+ catch (Exception e)
+ {
+ LOGGER.warn("Failed to find additional Logger configuration: " + springUrl);
+ }
+
+ // Read each resource
+ for (Resource resource : resources)
+ {
+ try
+ {
+ InputStream inputStream = resource.getInputStream();
+ Properties properties = new Properties();
+ properties.load(inputStream);
+ mainProperties.putAll(properties);
+ }
+ catch (Throwable e)
+ {
+ if (LOGGER.isDebugEnabled())
+ {
+ LOGGER.debug("Failed to add extra Logger configuration: \n" + " URL: " + springUrl + "\n"
+ + " Error: " + e.getMessage(), e);
+ }
+ }
+ }
+ }
+
+}