/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.usage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.log4j.Logger; import org.dspace.core.ConfigurationManager; import org.dspace.services.model.Event; /** * Serialize AbstractUsageEvent data to a file as Tab deliminated. Requires * configuration: in dspace.cfg specify the path to the file as the value of * {@code usageEvent.tabFileLogger.file}. * * @author Mark H. Wood * @author Mark Diggory * @version $Revision: 3734 $ */ public class TabFileUsageEventListener extends AbstractUsageEventListener { /** log4j category */ private static Logger errorLog = Logger .getLogger(TabFileUsageEventListener.class); /** File on which to write event records */ static PrintWriter log = null; public TabFileUsageEventListener() { if (null == log) { boolean appending; String logPath = ConfigurationManager .getProperty("usageEvent.tabFileLogger.file"); if (null == logPath) { errorLog .error("UsageEventTabFileLogger unconfigured, will not log events"); return; } String logDir = null; if (!new File(logPath).isAbsolute()) { logDir = ConfigurationManager.getProperty("log.dir"); } File logFile = new File(logDir, logPath); appending = logFile.length() > 0; try { log = new PrintWriter(new OutputStreamWriter( new FileOutputStream(logFile, true))); } catch (FileNotFoundException e) { errorLog .error( "UsageEventTabFileLogger cannot open file, will not log events", e); return; } if (!appending) { log.println("date event objectType objectId sessionId sourceAddress eperson"); } } } public void receiveEvent(Event event) { System.out.println("got: " + event.toString()); if(event instanceof UsageEvent) { UsageEvent ue = (UsageEvent)event; if (null == log) { return; } SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMdd'T'HHmmssSSS"); String string = dateFormat.format(new Date()); string += "\t" + ue.getName(); // event type string += "\t" + ue.getObject().getType(); string += "\t" + ue.getObject().getID(); string += "\t" + ue.getRequest().getSession().getId(); string += "\t" + ue.getRequest().getRequestURI(); String epersonName = (null == ue.getContext().getCurrentUser() ? "anonymous" : ue.getContext().getCurrentUser().getEmail()); string += "\t" + epersonName; log.println(string); log.flush(); } } }