001: /**
002: * com.mckoi.util.Log 09 Jun 2000
003: *
004: * Mckoi SQL Database ( http://www.mckoi.com/database )
005: * Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * Version 2 as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License Version 2 for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * Version 2 along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: *
020: * Change Log:
021: *
022: *
023: */package com.mckoi.util;
024:
025: import java.io.*;
026: import java.text.*;
027: import java.util.Date;
028:
029: /**
030: * A log file/stream that logs some information generated by the system.
031: * This is intended to help with debugging. It safely handles concurrent
032: * output to the log.
033: *
034: * @author Tobias Downer
035: */
036:
037: public class Log {
038:
039: /**
040: * The output stream where log information is output to.
041: */
042: private final LogWriter log_output;
043:
044: /**
045: * Date formatter.
046: */
047: private final DateFormat date_format = DateFormat
048: .getDateTimeInstance();
049:
050: public Log(String path) throws FileNotFoundException, IOException {
051: this (new File(path));
052: }
053:
054: public Log(File file, int size, int max_count) throws IOException {
055: this .log_output = new LogWriter(file, size, max_count);
056: }
057:
058: public Log(File file) throws FileNotFoundException, IOException {
059: // Defaults to a maximum of 12 512k log files
060: this (file, 512 * 1024, 12);
061: // this.log_output = new LogWriter(file, 512 * 1024, 12);
062: }
063:
064: protected Log() {
065: log_output = null;
066: }
067:
068: /**
069: * Writes an entry to the log file. The log file records the time the entry
070: * was put into the log, and the string which is the log.
071: */
072: public synchronized void log(String text) {
073: try {
074: log_output.write("[");
075: log_output.write(date_format.format(new Date()));
076: log_output.write("] ");
077: log_output.write(text);
078: log_output.flush();
079: } catch (IOException e) {
080: }
081: }
082:
083: public synchronized void logln(String text) {
084: try {
085: log_output.write(text);
086: log_output.write('\n');
087: log_output.flush();
088: } catch (IOException e) {
089: }
090: }
091:
092: /**
093: * Closes the log file.
094: */
095: public synchronized void close() {
096: try {
097: log_output.close();
098: } catch (IOException e) {
099: }
100: }
101:
102: // ---------- Static methods ----------
103:
104: /**
105: * Returns a Log that won't actually store a log. This is useful for
106: * options where the user doesn't want anything logged.
107: */
108: public static Log nullLog() {
109: return new NullLog();
110: }
111:
112: // ---------- Inner classes ----------
113:
114: }
115:
116: /**
117: * An implementation of Log that doesn't log anything.
118: */
119: class NullLog extends Log {
120:
121: public NullLog() {
122: super ();
123: }
124:
125: public void log(String text) {
126: // Don't do anything,
127: }
128:
129: public void logln(String text) {
130: // Don't do anything,
131: }
132:
133: public void close() {
134: // Don't do anything,
135: }
136:
137: }
|