1 25 29 package org.jresearch.gossip.log.avalon; 30 31 import java.io.File ; 32 import java.io.PrintWriter ; 33 import java.text.SimpleDateFormat ; 34 import java.util.Date ; 35 import java.util.Properties ; 36 import java.util.TimeZone ; 37 38 import javax.naming.InitialContext ; 39 import javax.servlet.http.HttpSession ; 40 import javax.sql.DataSource ; 41 42 import org.apache.log.ContextMap; 43 import org.apache.log.Hierarchy; 44 import org.apache.log.LogTarget; 45 import org.apache.log.Logger; 46 import org.apache.log.Priority; 47 import org.apache.log.format.PatternFormatter; 48 import org.apache.log.output.db.DefaultJDBCTarget; 49 import org.apache.log.output.io.WriterTarget; 50 import org.apache.log.output.io.rotate.RotateStrategyByDate; 51 import org.apache.log.output.io.rotate.RotatingFileTarget; 52 import org.apache.log.output.io.rotate.UniqueFileStrategy; 53 import org.jresearch.gossip.IConst; 54 import org.jresearch.gossip.beans.user.User; 55 import org.jresearch.gossip.exception.SystemException; 56 import org.jresearch.gossip.log.LogLevel; 57 58 62 public class JGossipLog { 63 64 public static final Priority[] PRIORITIES = new Priority[] { Priority.INFO, 65 Priority.WARN, Priority.ERROR, Priority.FATAL_ERROR, Priority.DEBUG }; 66 67 private Logger appLogger; 68 69 private Logger auditLogger; 70 71 private static SimpleDateFormat dateFormat; 72 73 private static JGossipLog instance; 74 75 private static Object lock = new Object (); 76 77 public synchronized static JGossipLog getInstance() throws SystemException { 78 79 if (instance == null) { 80 synchronized (lock) { 81 if (instance == null) { 82 instance = new JGossipLog(); 83 } 84 } 85 } 86 return instance; 87 } 88 89 public JGossipLog() throws SystemException { 90 try { 91 Properties prop = new Properties (); 92 prop.load(getClass().getClassLoader().getResourceAsStream( 93 "org/jresearch/gossip/resources/log.properties")); 94 boolean writeToFile = "c".equalsIgnoreCase(prop 95 .getProperty("logs.type")); 96 98 appLogger = Hierarchy.getDefaultHierarchy().getLoggerFor( 99 IConst.LOG.APPLICATION_LOG_NAME); 100 String logLevel = prop.getProperty("logs.level"); 101 if (null == logLevel) 102 logLevel = "DEBUG"; 103 104 Priority priority = Priority.getPriorityForName(logLevel); 105 appLogger.setPriority(priority); 106 107 final PatternFormatter appformatter = new PatternFormatter(prop 108 .getProperty("logs.pattern.application")); 109 110 LogTarget[] appLoggerTargets = new LogTarget[writeToFile ? 2 : 1]; 111 112 appLoggerTargets[0] = new WriterTarget(new PrintWriter (System.out), 113 appformatter); 114 if (writeToFile) { 115 final File appfile = new File (prop.getProperty("logs.dir") 117 + File.separator + IConst.LOG.APPLICATION_LOG_NAME); 118 119 appLoggerTargets[1] = new RotatingFileTarget(true, 120 appformatter, new RotateStrategyByDate(), 121 new UniqueFileStrategy(appfile, ".yyyy-MM-dd", ".log")); 122 } 123 appLogger.setLogTargets(appLoggerTargets); 125 126 128 auditLogger = Hierarchy.getDefaultHierarchy().getLoggerFor( 129 IConst.LOG.AUDIT_LOG_NAME); 130 auditLogger.setPriority(Priority.INFO); 131 final PatternFormatter auditformatter = new PatternFormatter(prop 132 .getProperty("logs.pattern.audit")); 133 134 LogTarget[] auditLoggerTargets = new LogTarget[writeToFile ? 2 : 1]; 135 InitialContext ic = new InitialContext (); 137 DataSource ds = (DataSource ) ic.lookup("jgossip_db"); 138 139 auditLoggerTargets[0] = new DefaultJDBCTarget(ds, 140 IConst.LOG.LOG_TABLE, IConst.LOG.LOG_COLUMNS); 141 if (writeToFile) { 142 144 final File auditfile = new File (prop.getProperty("logs.dir") 145 + File.separator + IConst.LOG.AUDIT_LOG_NAME); 146 147 auditLoggerTargets[1] = new RotatingFileTarget( 148 true, 149 auditformatter, 150 new RotateStrategyByDate(), 151 new UniqueFileStrategy(auditfile, ".yyyy-MM-dd", ".log")); 152 } 153 154 auditLogger.setLogTargets(auditLoggerTargets); 156 } catch (Exception e) { 157 throw new SystemException(e); 158 } 159 } 160 161 164 public Logger getAppLogger() { 165 return appLogger; 166 } 167 168 171 public Logger getAuditLogger() { 172 return auditLogger; 173 } 174 175 180 public static void audit(LogLevel level, String remoteIp, String message) { 181 bindLogContext(" ", remoteIp, " "); 182 audit(level, message); 183 } 184 185 190 public static void audit(LogLevel level, String message, Throwable t) { 191 bindLogContext(" ", " ", " "); 192 try { 193 Logger logger = JGossipLog.getInstance().auditLogger; 194 switch (level.getLevel()) { 195 case LogLevel.ERROR_INT: 196 logger.error(message, t); 197 break; 198 case LogLevel.WARN_INT: 199 logger.warn(message, t); 200 break; 201 case LogLevel.INFO_INT: 202 logger.info(message, t); 203 break; 204 default: 205 logger.debug(message, t); 206 } 207 } catch (SystemException e) { 208 e.printStackTrace(); 209 } 210 } 211 212 218 public static void audit(LogLevel level, User user, String message, 219 HttpSession session) { 220 221 bindLogContext((user.getName() == null) ? "<anonimous>" : user 222 .getName(), (user.getIp() == null) ? " " : user.getIp(), 223 session.getId()); 224 audit(level, message); 225 } 226 227 private static final void audit(LogLevel level, String message) { 228 System.out.println(message); 229 try { 230 Logger logger = JGossipLog.getInstance().auditLogger; 231 switch (level.getLevel()) { 232 case LogLevel.ERROR_INT: 233 logger.error(message); 234 break; 235 case LogLevel.WARN_INT: 236 logger.warn(message); 237 break; 238 case LogLevel.INFO_INT: 239 logger.info(message); 240 break; 241 default: 242 logger.debug(message); 243 } 244 } catch (SystemException e) { 245 e.printStackTrace(); 246 } 247 } 248 249 private static SimpleDateFormat getDateFormat() { 250 if (dateFormat == null) { 251 synchronized (lock) { 252 if (dateFormat == null) { 253 dateFormat = new SimpleDateFormat ( 254 IConst.VALUES.ISO_DATE_FORMAT); 255 dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 256 } 257 } 258 } 259 return dateFormat; 260 } 261 262 private static void bindLogContext(String userName, String remoteIP, 263 String sessionId) { 264 final ContextMap context = new ContextMap(); 265 context.set("UserName", userName); 266 context.set("RemoteIP", remoteIP); 267 context.set("SessionId", sessionId); 268 context.set("time", getDateFormat().format(new Date ())); 269 context.makeReadOnly(); 270 271 ContextMap.bind(context); 273 } 274 } | Popular Tags |