001/* 002 * Copyright 2017 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.ametys.runtime.log; 017 018import org.apache.log4j.Appender; 019import org.apache.log4j.Logger; 020 021import org.ametys.runtime.plugin.ExtensionPoint; 022import org.ametys.runtime.plugin.component.AbstractThreadSafeComponentExtensionPoint; 023 024/** 025 * {@link ExtensionPoint} handling the {@link ExternalLog}s. 026 */ 027public class ExternalLogExtensionPoint extends AbstractThreadSafeComponentExtensionPoint<ExternalLog> 028{ 029 /** Avalon Role */ 030 public static final String ROLE = ExternalLogExtensionPoint.class.getName(); 031 032 @Override 033 public void initializeExtensions() throws Exception 034 { 035 super.initializeExtensions(); 036 MemoryAppender memoryAppender = _getMemoryAppender(); 037 038 for (String extensionId : this.getExtensionsIds()) 039 { 040 ExternalLog extension = this.getExtension(extensionId); 041 Appender appender = extension.getAppender(); 042 org.apache.log4j.Logger category = extension.getCategory(); 043 category.addAppender(appender); 044 if (memoryAppender != null && !category.getAdditivity()) 045 { 046 category.addAppender(memoryAppender); 047 } 048 } 049 } 050 051 /** 052 * Get the memory-appender 053 * @return the memory appender of the application, or null if none found 054 */ 055 private MemoryAppender _getMemoryAppender() 056 { 057 Appender memoryAppender = Logger.getRootLogger().getAppender(org.ametys.plugins.core.ui.log.LogManager.MEMORY_APPENDER_NAME); 058 if (memoryAppender != null && memoryAppender instanceof MemoryAppender) 059 { 060 return (MemoryAppender) memoryAppender; 061 } 062 return null; 063 } 064 065}