/* * Version: $Revision: $ * * Date: $Date: $ * * Copyright (c) 2002-2009, The DSpace Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the DSpace Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ 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(); } } }