001package com.ganteater.ae; 002 003import java.lang.reflect.Constructor; 004import java.util.ArrayList; 005import java.util.List; 006import java.util.Map; 007 008import org.apache.commons.lang.ObjectUtils; 009 010import com.ganteater.ae.logfilter.LogFilter; 011import com.ganteater.ae.util.AEUtils; 012import com.ganteater.ae.util.xml.easyparser.Node; 013 014public class Logger implements ILogger { 015 016 private static final String FILTER_DEFAULT_PACKAGE = "com.ganteater.ae.logfilter"; 017 018 private org.apache.log4j.Logger logger; 019 private List<LogFilter> logFilters = new ArrayList<>(); 020 021 public Logger(String name) { 022 logger = org.apache.log4j.Logger.getLogger(name); 023 024 AEWorkspace instance = AEWorkspace.getInstance(); 025 if (instance != null) { 026 Node configNode = instance.getConfigNode(); 027 if (configNode != null) { 028 Node[] loggers = configNode.getNodes("Logger"); 029 for (Node loggerNode : loggers) { 030 for (Node filterNode : loggerNode.getNodes("filter")) { 031 try { 032 String className = filterNode.getAttribute("class"); 033 className = AEUtils.getFullClassName(className, FILTER_DEFAULT_PACKAGE); 034 Class<?> filterClass = Class.forName(className); 035 Constructor<?> constructor = filterClass.getConstructor(Map.class); 036 LogFilter filter = (LogFilter) constructor.newInstance(filterNode.getAttributes()); 037 038 logFilters.add(filter); 039 } catch (Exception e) { 040 e.printStackTrace(); 041 } 042 } 043 } 044 } 045 } 046 } 047 048 @Override 049 public Object info(Object message) { 050 message = filter(message); 051 logger.info(message); 052 return message; 053 } 054 055 @Override 056 public Object debug(Object message) { 057 message = filter(message); 058 logger.debug(message); 059 return message; 060 } 061 062 @Override 063 public Object debug(Object message, Throwable t) { 064 message = filter(message); 065 debug(message, t); 066 return message; 067 } 068 069 @Override 070 public Object warn(Object message) { 071 message = filter(message); 072 logger.warn(message); 073 return message; 074 } 075 076 @Override 077 public Object error(Object message) { 078 logger.error(message); 079 return message; 080 } 081 082 @Override 083 public Object error(Object message, Throwable t) { 084 message = filter(message); 085 logger.error(message, t); 086 return message; 087 } 088 089 @Override 090 public String getName() { 091 return logger.getName(); 092 } 093 094 public boolean isFilterEnabled() { 095 return logFilters.size() > 0; 096 } 097 098 public String filter(Object message) { 099 if (ObjectUtils.toString(message) != null) { 100 for (LogFilter logFilter : logFilters) { 101 message = logFilter.filter(ObjectUtils.toString(message)); 102 } 103 } 104 return ObjectUtils.toString(message); 105 } 106 107}