001 package toolbus.logging; 002 003 import java.io.PrintStream; 004 import java.text.SimpleDateFormat; 005 import java.util.Date; 006 007 /** 008 * Logger implementation that writes to the command line / std-err. 009 * 010 * @author Arnold Lankamp 011 */ 012 public class CommandLineLogger implements ILogger{ 013 private final int level; 014 private final PrintStream printStream; 015 private boolean timestamp = false; 016 017 /** 018 * Default constructor. Inititalizes this logger with the default log level (WARNING). 019 */ 020 CommandLineLogger(){ 021 this(ILogger.WARNING); 022 } 023 024 /** 025 * Constructor. Initialized this logger with the given log level. 026 * 027 * @param level 028 * The log level to initialize this logger with. 029 */ 030 CommandLineLogger(int level){ 031 super(); 032 033 this.level = level; 034 printStream = System.err; 035 } 036 037 /** 038 * Method for checking if we should log a message. This depends on the log level and the given 039 * log level. 040 * 041 * @param loglevel 042 * The log level of the message. 043 * @return True if we should log the message with the given log level, false otherwise. 044 */ 045 private boolean shouldLog(int loglevel){ 046 return (this.level >= loglevel); 047 } 048 049 /* 050 * @see toolbus.logging.ILogger#setTimestamp(boolean) 051 */ 052 public void setTimestamp(boolean on) { 053 timestamp = on; 054 } 055 056 /** 057 * @see ILogger#log(String, int) 058 */ 059 public void log(String message, int loglevel){ 060 if(shouldLog(loglevel)){ 061 PrintStream ps = printStream; 062 synchronized(ps){ 063 if(timestamp){ 064 ps.print("["); 065 ps.print(getFormattedDateTime()); 066 ps.print("] - "); 067 } 068 ps.print(getLogLevelString(loglevel)); 069 ps.print(" - "); 070 ps.print(message); 071 ps.println(); 072 } 073 } 074 } 075 076 /** 077 * @see ILogger#log(String, Throwable, int) 078 */ 079 public void log(String message, Throwable throwable, int loglevel){ 080 if(shouldLog(loglevel)){ 081 PrintStream ps = printStream; 082 synchronized(ps){ 083 if(timestamp){ 084 ps.print("["); 085 ps.print(getFormattedDateTime()); 086 ps.print("] - "); 087 } 088 ps.print(getLogLevelString(loglevel)); 089 ps.print(" - "); 090 ps.print(message); 091 ps.println(); 092 093 throwable.printStackTrace(ps); 094 ps.println(); 095 } 096 } 097 } 098 099 /** 100 * Returns a properly formated string containing the date and time. 101 * 102 * @return A properly formated string containing the date and time. 103 */ 104 public static String getFormattedDateTime(){ 105 return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z").format(new Date()); 106 } 107 108 /** 109 * Returns a string containing a string representation of the log level. 110 * 111 * @param logLevel 112 * The log level we want the string representation of. 113 * @return The string representation of the given log level. 114 */ 115 public static String getLogLevelString(int logLevel){ 116 switch(logLevel){ 117 case ILogger.ERROR: 118 return ILogger.ERRORSTR; 119 case ILogger.WARNING: 120 return ILogger.WARNINGSTR; 121 case ILogger.FATAL: 122 return ILogger.FATALSTR; 123 case ILogger.INFO: 124 return ILogger.INFOSTR; 125 case ILogger.DEBUG: 126 return ILogger.DEBUGSTR; 127 case ILogger.LOG: 128 return ILogger.LOGSTR; 129 default: 130 return ILogger.UNKNOWNSTR; 131 } 132 } 133 134 135 }