001 // This file is part of AceWiki. 002 // Copyright 2008-2012, AceWiki developers. 003 // 004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU 005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of 006 // the License, or (at your option) any later version. 007 // 008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 010 // Lesser General Public License for more details. 011 // 012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If 013 // not, see http://www.gnu.org/licenses/. 014 015 package ch.uzh.ifi.attempto.base; 016 017 import java.io.DataOutputStream; 018 import java.io.File; 019 import java.io.FileOutputStream; 020 import java.io.IOException; 021 import java.util.Calendar; 022 023 /** 024 * This class is used to log the events on the server. 025 * 026 * @author Tobias Kuhn 027 */ 028 // TODO: Use java.util.logging.Logger 029 public class Logger { 030 031 private final String fileName; 032 private String username; 033 private final int sessionID; 034 035 /** 036 * Creates a new logger instance for the given file, user name, and session id. 037 * 038 * @param fileName The name of the log file. 039 * @param username The user name. 040 * @param sessionID The session id. 041 */ 042 public Logger(String fileName, String username, int sessionID) { 043 this.fileName = fileName; 044 this.username = username; 045 this.sessionID = sessionID; 046 } 047 048 /** 049 * Creates a new logger instance for the given file and session id. 050 * 051 * @param fileName The name of the log file. 052 * @param sessionID The session id. 053 */ 054 public Logger(String fileName, int sessionID) { 055 this(fileName, "", sessionID); 056 } 057 058 /** 059 * Sets the user name. 060 * 061 * @param username The user name. 062 */ 063 public void setUsername(String username) { 064 this.username = username; 065 } 066 067 /** 068 * Writes a log entry into the log file of the respective ontology. 069 * 070 * @param type The type of the log entry. 071 * @param text The text of the log entry. 072 */ 073 public void log(String type, String text) { 074 Calendar c = Calendar.getInstance(); 075 long timestamp = System.currentTimeMillis(); 076 c.setTimeInMillis(timestamp); 077 String year = c.get(Calendar.YEAR) + ""; 078 String month = makeString(c.get(Calendar.MONTH)+1, 2); 079 String day = makeString(c.get(Calendar.DAY_OF_MONTH), 2); 080 String hour = makeString(c.get(Calendar.HOUR_OF_DAY), 2); 081 String min = makeString(c.get(Calendar.MINUTE), 2); 082 String sec = makeString(c.get(Calendar.SECOND), 2); 083 String millis = makeString(c.get(Calendar.MILLISECOND), 3); 084 String dateTime = year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec + "." + millis; 085 String session = makeString(sessionID, 4); 086 String un; 087 if (username == null || username.equals("")) { 088 un = ""; 089 } else { 090 un = " '" + username + "'"; 091 } 092 String dir = "logs"; 093 String fn = fileName; 094 if (fileName.indexOf("/") > -1) { 095 dir = fileName.replaceFirst("(.*)/[^/]*", "$1"); 096 fn = fileName.replaceFirst(".*/([^/]*)", "$1"); 097 } 098 try { 099 if (!(new File(dir)).exists()) (new File(dir)).mkdir(); 100 DataOutputStream out = new DataOutputStream(new FileOutputStream(dir + "/" + fn + ".log", true)); 101 out.writeBytes(timestamp + " (" + dateTime + ") [" + session + "]" + un + " [" + type + "] " + text.replaceAll("\\n", "~n") + "\n"); 102 out.flush(); 103 out.close(); 104 } catch (IOException ex) { 105 ex.printStackTrace(); 106 } 107 } 108 109 private static String makeString(int value, int size) { 110 String s = value + ""; 111 while (s.length() < size) { 112 s = "0" + s; 113 } 114 return s; 115 } 116 117 }