mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
ACS-9074 Bump log4j to 2.24.2 (#3087)
* ACS-9023 Bump log4j to 2.24.2 * ACS-9074 Update license header
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -79,7 +79,7 @@
|
|||||||
<dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version>
|
<dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version>
|
||||||
<dependency.xercesImpl.version>2.12.2</dependency.xercesImpl.version>
|
<dependency.xercesImpl.version>2.12.2</dependency.xercesImpl.version>
|
||||||
<dependency.slf4j.version>2.0.16</dependency.slf4j.version>
|
<dependency.slf4j.version>2.0.16</dependency.slf4j.version>
|
||||||
<dependency.log4j.version>2.23.1</dependency.log4j.version>
|
<dependency.log4j.version>2.24.2</dependency.log4j.version>
|
||||||
<dependency.groovy.version>3.0.23</dependency.groovy.version>
|
<dependency.groovy.version>3.0.23</dependency.groovy.version>
|
||||||
<dependency.tika.version>2.9.2</dependency.tika.version>
|
<dependency.tika.version>2.9.2</dependency.tika.version>
|
||||||
<dependency.truezip.version>7.7.10</dependency.truezip.version>
|
<dependency.truezip.version>7.7.10</dependency.truezip.version>
|
||||||
|
@@ -1,195 +1,199 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
* Copyright (C) 2005 - 2024 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.admin;
|
package org.alfresco.repo.admin;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.Properties;
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.core.LoggerContext;
|
||||||
import org.apache.logging.log4j.core.LoggerContext;
|
import org.apache.logging.log4j.core.config.properties.PropertiesConfiguration;
|
||||||
import org.apache.logging.log4j.core.config.properties.PropertiesConfiguration;
|
import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationBuilder;
|
||||||
import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationBuilder;
|
import org.springframework.beans.BeansException;
|
||||||
import org.springframework.beans.BeansException;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContextAware;
|
||||||
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
import org.springframework.core.io.support.ResourcePatternResolver;
|
||||||
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.
|
||||||
* Initialises Log4j's HierarchyDynamicMBean (refer to core-services-context.xml) and any overriding log4.properties files.
|
* <p>
|
||||||
* The actual implementation uses introspection to avoid any hard-coded references to Log4J classes. If Log4J is
|
* 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:
|
||||||
* not present, this class will do nothing.
|
*
|
||||||
* <p>
|
* <pre>
|
||||||
* Alfresco modules can provide their own log4j2.properties file, which augments/overrides the global log4j2.properties
|
* config/alfresco/module/{module.id}/log4j2.properties
|
||||||
* within the Alfresco webapp. Within the module's source tree, suppose you create:
|
* </pre>
|
||||||
* <pre>
|
*
|
||||||
* config/alfresco/module/{module.id}/log4j2.properties
|
* At deployment time, this log4j2.properties file will be placed in:
|
||||||
* </pre>
|
*
|
||||||
* At deployment time, this log4j2.properties file will be placed in:
|
* <pre>
|
||||||
* <pre>
|
* WEB-INF/classes/alfresco/module/{module.id}/log4j2.properties
|
||||||
* WEB-INF/classes/alfresco/module/{module.id}/log4j2.properties
|
* </pre>
|
||||||
* </pre>
|
*
|
||||||
* Where {module.id} is whatever value is set within the AMP's module.properties file. For details, see: <a
|
* Where {module.id} is whatever value is set within the AMP's module.properties file. For details, see: <a href='http://wiki.alfresco.com/wiki/Developing_an_Alfresco_Module'>Developing an Alfresco Module</a>
|
||||||
* href='http://wiki.alfresco.com/wiki/Developing_an_Alfresco_Module'>Developing an Alfresco Module</a>
|
* <p>
|
||||||
* <p>
|
* For example, if {module.id} is "org.alfresco.module.someModule", then within your source code you'll have:
|
||||||
* For example, if {module.id} is "org.alfresco.module.someModule", then within your source code you'll have:
|
*
|
||||||
*
|
* <pre>
|
||||||
* <pre>
|
* config / alfresco / module / org.alfresco.module.someModule / log4j2.properties
|
||||||
* config / alfresco / module / org.alfresco.module.someModule / log4j2.properties
|
* </pre>
|
||||||
* </pre>
|
* <p>
|
||||||
* <p>
|
* This would be deployed to:
|
||||||
* This would be deployed to:
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
* WEB - INF / classes / alfresco / module / org.alfresco.module.someModule / log4j2.properties
|
* WEB - INF / classes / alfresco / module / org.alfresco.module.someModule / log4j2.properties
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
public class Log4JHierarchyInit implements ApplicationContextAware
|
public class Log4JHierarchyInit implements ApplicationContextAware
|
||||||
{
|
{
|
||||||
private static final Log LOGGER = LogFactory.getLog(Log4JHierarchyInit.class);
|
private static final Log LOGGER = LogFactory.getLog(Log4JHierarchyInit.class);
|
||||||
private final List<String> extraLog4jUrls;
|
private final List<String> extraLog4jUrls;
|
||||||
private ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
private ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
|
||||||
|
|
||||||
public Log4JHierarchyInit()
|
static
|
||||||
{
|
{
|
||||||
extraLog4jUrls = new ArrayList<>();
|
System.setProperty("log4j2.disableJmx", "false");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public Log4JHierarchyInit()
|
||||||
* Loads a set of augmenting/overriding log4j2.properties files from locations specified via an array of Spring URLS.
|
{
|
||||||
* <p>
|
extraLog4jUrls = new ArrayList<>();
|
||||||
* 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<String> urls)
|
* Loads a set of augmenting/overriding log4j2.properties files from locations specified via an array of Spring URLS.
|
||||||
{
|
* <p>
|
||||||
extraLog4jUrls.addAll(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<String> urls)
|
||||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
|
{
|
||||||
{
|
extraLog4jUrls.addAll(urls);
|
||||||
this.resolver = applicationContext;
|
}
|
||||||
}
|
|
||||||
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
|
||||||
public void init()
|
{
|
||||||
{
|
this.resolver = applicationContext;
|
||||||
importLogSettings();
|
}
|
||||||
}
|
|
||||||
|
public void init()
|
||||||
private void importLogSettings()
|
{
|
||||||
{
|
importLogSettings();
|
||||||
try
|
}
|
||||||
{
|
|
||||||
Properties mainProperties = new Properties();
|
private void importLogSettings()
|
||||||
|
{
|
||||||
importMainLogSettings(mainProperties);
|
try
|
||||||
for (String url : extraLog4jUrls)
|
{
|
||||||
{
|
Properties mainProperties = new Properties();
|
||||||
importLogSettings(url, mainProperties);
|
|
||||||
}
|
importMainLogSettings(mainProperties);
|
||||||
|
for (String url : extraLog4jUrls)
|
||||||
PropertiesConfiguration propertiesConfiguration = new PropertiesConfigurationBuilder()
|
{
|
||||||
.setConfigurationSource(null)
|
importLogSettings(url, mainProperties);
|
||||||
.setRootProperties(mainProperties)
|
}
|
||||||
.setLoggerContext((LoggerContext) LogManager.getContext(false))
|
|
||||||
.build();
|
PropertiesConfiguration propertiesConfiguration = new PropertiesConfigurationBuilder()
|
||||||
|
.setConfigurationSource(null)
|
||||||
propertiesConfiguration.initialize();
|
.setRootProperties(mainProperties)
|
||||||
((LoggerContext) LogManager.getContext(false)).reconfigure(propertiesConfiguration);
|
.setLoggerContext((LoggerContext) LogManager.getContext(false))
|
||||||
}
|
.build();
|
||||||
catch (Throwable t)
|
|
||||||
{
|
propertiesConfiguration.initialize();
|
||||||
if (LOGGER.isDebugEnabled())
|
((LoggerContext) LogManager.getContext(false)).reconfigure(propertiesConfiguration);
|
||||||
{
|
}
|
||||||
LOGGER.debug("Failed to add extra Logger configuration: \n" + " Error: " + t.getMessage(), t);
|
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)
|
|
||||||
{
|
private static void importMainLogSettings(Properties mainProperties) throws IOException
|
||||||
try (FileInputStream fis = new FileInputStream(file))
|
{
|
||||||
{
|
File file = ((LoggerContext) LogManager.getContext()).getConfiguration().getConfigurationSource().getFile();
|
||||||
mainProperties.load(fis);
|
if (file != null)
|
||||||
}
|
{
|
||||||
catch (FileNotFoundException e)
|
try (FileInputStream fis = new FileInputStream(file))
|
||||||
{
|
{
|
||||||
if (LOGGER.isDebugEnabled())
|
mainProperties.load(fis);
|
||||||
{
|
}
|
||||||
LOGGER.debug("Failed to find initial configuration: \n" + " Error: " + e.getMessage(), e);
|
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
|
private void importLogSettings(String springUrl, Properties mainProperties)
|
||||||
{
|
{
|
||||||
resources = resolver.getResources(springUrl);
|
Resource[] resources = null;
|
||||||
}
|
|
||||||
catch (Exception e)
|
try
|
||||||
{
|
{
|
||||||
LOGGER.warn("Failed to find additional Logger configuration: " + springUrl);
|
resources = resolver.getResources(springUrl);
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
// Read each resource
|
{
|
||||||
for (Resource resource : resources)
|
LOGGER.warn("Failed to find additional Logger configuration: " + springUrl);
|
||||||
{
|
}
|
||||||
try
|
|
||||||
{
|
// Read each resource
|
||||||
InputStream inputStream = resource.getInputStream();
|
for (Resource resource : resources)
|
||||||
Properties properties = new Properties();
|
{
|
||||||
properties.load(inputStream);
|
try
|
||||||
mainProperties.putAll(properties);
|
{
|
||||||
}
|
InputStream inputStream = resource.getInputStream();
|
||||||
catch (Throwable e)
|
Properties properties = new Properties();
|
||||||
{
|
properties.load(inputStream);
|
||||||
if (LOGGER.isDebugEnabled())
|
mainProperties.putAll(properties);
|
||||||
{
|
}
|
||||||
LOGGER.debug("Failed to add extra Logger configuration: \n" + " URL: " + springUrl + "\n"
|
catch (Throwable e)
|
||||||
+ " Error: " + e.getMessage(), e);
|
{
|
||||||
}
|
if (LOGGER.isDebugEnabled())
|
||||||
}
|
{
|
||||||
}
|
LOGGER.debug("Failed to add extra Logger configuration: \n" + " URL: " + springUrl + "\n"
|
||||||
}
|
+ " Error: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user