/* * Copyright (C) 2005-2007 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program 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 General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * As a special exception to the terms and conditions of version 2.0 of * the GPL, you may redistribute this Program in connection with Free/Libre * and Open Source Software ("FLOSS") applications as described in Alfresco's * FLOSS exception. You should have recieved a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ package org.alfresco.repo.admin; import java.io.BufferedInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Properties; import org.apache.log4j.jmx.HierarchyDynamicMBean; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.spi.LoggerRepository; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; /** * Initialises Log4j's HierarchyDynamicMBean (refer to core-services-context.xml) * and any overriding log4.properties files. *
* Alfresco modules can provide their own log4j.properties file, * which augments/overrides the global log4j.properties within * the Alfresco webapp. Within the module's source tree, suppose * you create:
* config/alfresco/module/{module.id}/log4j.properties* At deployment time, this log4j.properties file will be placed in:
* WEB-INF/classes/alfresco/module/{module.id}/log4j.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.avmCompare", then * within your source code you'll have:
* config/alfresco/module/org.alfresco.module.avmCompare/log4j.properties* This would be deployed to:
* WEB-INF/classes/alfresco/module/org.alfresco.module.avmCompare/log4j.properties* By default the 'overriding_log4j_properties' property of the * 'log4JHierarchyInit' bean within core-services-context.xml is:
* classpath*:alfresco/module/*/log4j.properties* Therefore, Log4JHierarchyInit will discover this supplimentary log4j.properties * file, and merge it with the main log4j.file (WEB-INF/classes/log4j.properties). * For example, the org.alfresco.module.avmCompare log4j.properties file might look like this: *
* #----------------------------------------------------------------------- * # webscript module log4j.properties * # * # NOTE * # ---- * # * # Log4j uses the following logging levels: * # debug,info,warn,error,fatal * # * # To set the logging level of {fullClassName} to {loglevel}, * # add a line to this file of the following form: * # * # log4j.logger.{fullClassName}={loglevel} * # * # For example, to make 'com.example.MyExample' produce 'debug' * # logs, add a line like this: * # * # log4j.logger.com.example.MyExample=debug * # * # * # WARNING * # ------- * # Log properties in this log4j.properties file override/augment * # those in the webapp's main log4j.properties. * # * #----------------------------------------------------------------------- * * log4j.logger.org.alfresco.module.avmCompare.AvmCompare=info ** * This system allows the author of any module to provide rich logging control * without concern for corrupting the central log4j.properties file during * AMP installation/deinstallation. For details, see: * Module Management Tool */ public class Log4JHierarchyInit { private HierarchyDynamicMBean log4jHierarchy; private List