/src/util/logger/LoggerManager.java

https://github.com/cryptoyoshi/vooga · Java · 313 lines · 106 code · 31 blank · 176 comment · 2 complexity · 963299174eedbd6d3497854e5853b3bd MD5 · raw file

  1. package util.logger;
  2. import java.io.OutputStream;
  3. import java.util.logging.Handler;
  4. import java.util.logging.Level;
  5. import java.util.logging.LogRecord;
  6. import java.util.logging.Logger;
  7. /**
  8. * A class that handles a logger.
  9. * This class does not propagate LogRecords to parent Loggers, so if the
  10. * user wants to set parents or even more complex instructions, he/she
  11. * should call getLogger() to do so.
  12. * It sets a console handler as a default handler.
  13. *
  14. * By default, the logger starts at ALL level so any type of message is logged.
  15. *
  16. * Note that the user does not need to use any other class in this package
  17. * except this one to manage the logger
  18. *
  19. * @author Henrique Moraes
  20. */
  21. public class LoggerManager {
  22. /**
  23. * This logger serves as a quick reference in case the user
  24. * wants to log a message in one line of code
  25. * The logger used was initialized with this class' name
  26. */
  27. public static final Logger DEFAULT_LOGGER =
  28. Logger.getLogger(LoggerManager.class.getName());
  29. private static final String LOG_EXT = ".log";
  30. public static final String DEFAULT_FILE_NAME = "Logger";
  31. private Logger myLogger;
  32. private IVoogaHandler myDefaultHandler = new HandlerConsole();
  33. private Level myDefaultLevel = Level.ALL;
  34. /**
  35. * Constructor
  36. * Sets a logger using reflection to find the name of the calling class
  37. * The Logger is initialized with the name of the calling class
  38. * By default, a console handler is set
  39. */
  40. public LoggerManager () {
  41. initializeLogger(LoggerReflection.getCallerClassName());
  42. }
  43. /**
  44. * Constructor.
  45. * Sets a logger according to the given class name
  46. */
  47. public LoggerManager (String loggerName) {
  48. initializeLogger(loggerName);
  49. }
  50. /**
  51. * Initializes a logger with default parameters of this manager
  52. *
  53. * @param loggerName Name of the logger to initialize
  54. */
  55. private void initializeLogger (String loggerName) {
  56. myLogger = Logger.getLogger(loggerName);
  57. myLogger.setUseParentHandlers(false);
  58. myLogger.setLevel(myDefaultLevel);
  59. addHandler(myDefaultHandler);
  60. }
  61. /**
  62. * Adds a handler to the logger and sets it to the logger level
  63. * All add handler methods eventually pass through this method
  64. * Can be used to set customized handlers for the logger in case
  65. * the user wants to extend the design
  66. *
  67. * @param handlerType the type of handler to be added
  68. */
  69. public void addHandler (IVoogaHandler hand) {
  70. Handler handler = hand.getHandler();
  71. handler.setLevel(myLogger.getLevel());
  72. myLogger.addHandler(handler);
  73. }
  74. /**
  75. * Adds a memory handler to the logger depending on given handler and
  76. * constraints. A memory handler pushes all log records after a message of
  77. * the specified threshold level is logged
  78. * This API was designed to be able to combine any other handler to the
  79. * memoryHandler
  80. * WARNING the type of handler added will have level INFO.
  81. * Once it is set, its level cannot be changed. If the user wishes to set
  82. * the handler from memory, he should set it manually and call the regular
  83. * addHandler()
  84. *
  85. * @param handler the type of handler to have records pushed to
  86. * @param size Number of maximum records this handler will maintain
  87. * @param pushLevel push to handler as soon as a message of the given
  88. * level is issued
  89. */
  90. public void addMemoryHandler (IVoogaHandler handler, int size, Level pushLevel) {
  91. addHandler(new HandlerMemory(handler, size, pushLevel));
  92. }
  93. /**
  94. * Adds a memory handler to the logger depending on given handler and
  95. * constraints. A memory handler pushes all log records after a message of
  96. * the specified threshold level is logged
  97. * This API was designed to be able to combine any other handler to the
  98. * memoryHandler
  99. * WARNING the type of handler added will have level INFO.
  100. * Once it is set, its level cannot be changed. If the user wishes to set
  101. * the handler from memory, he should set it manually and call the regular
  102. * addHandler()
  103. *
  104. * @param handler the type of handler to have records pushed to
  105. */
  106. public void addMemoryHandler (IVoogaHandler handler) {
  107. HandlerMemory memory = new HandlerMemory();
  108. memory.setHandler(handler);
  109. addHandler(memory);
  110. }
  111. /**
  112. *
  113. * Adds a handler that sends log records to the Console
  114. */
  115. public void addConsoleHandler () {
  116. addHandler(new HandlerConsole());
  117. }
  118. /**
  119. *
  120. * Adds a handler that records messages in a txt file with a
  121. * default file name
  122. */
  123. public void addTxtHandler () {
  124. addHandler(new HandlerTxt());
  125. }
  126. /**
  127. *
  128. * Adds a handler that records messages in a txt file
  129. *
  130. * @param fileName Name of the file to have records written to
  131. */
  132. public void addTxtHandler (String fileName) {
  133. addHandler(new HandlerTxt(fileName));
  134. }
  135. /**
  136. *
  137. * Adds a handler that records messages in a file with user-defined extension
  138. *
  139. * @param fileName Name of the file to have records written to
  140. * @param ext The extension of the file
  141. */
  142. public void addCustomExtensionFileHandler (String fileName, String ext) {
  143. addHandler(new HandlerTxt(fileName, ext));
  144. }
  145. /**
  146. *
  147. * Adds a handler that records messages in a .log file
  148. *
  149. * @param fileName Name of the file to have records written to
  150. */
  151. public void addLogHandler (String fileName) {
  152. addCustomExtensionFileHandler(fileName, LOG_EXT);
  153. }
  154. /**
  155. *
  156. * Adds a handler that records messages in an XML file
  157. *
  158. * @param fileName Name of the file to have records written to
  159. */
  160. public void addXMLHandler (String fileName) {
  161. addHandler(new HandlerXML(fileName));
  162. }
  163. /**
  164. *
  165. * Adds a handler that records messages in an XML file
  166. */
  167. public void addXMLHandler () {
  168. addHandler(new HandlerXML());
  169. }
  170. /**
  171. *
  172. * Adds a handler that sends log records across a given stream
  173. *
  174. * @param out Outputstream that this handler should write to
  175. */
  176. public void addStreamHandler (OutputStream out) {
  177. addHandler(new HandlerStream(out));
  178. }
  179. /**
  180. *
  181. * Adds a handler that sends log records across a given stream
  182. * If no stream is given, the manager chooses System.out by default
  183. */
  184. public void addStreamHandler () {
  185. addHandler(new HandlerStream());
  186. }
  187. /**
  188. *
  189. * Adds a handler that sends log records through a given socket
  190. *
  191. * @param host string with the name of the host of this connection
  192. * @param port number of the port to be used
  193. */
  194. public void addSocketHandler (String host, int port) {
  195. addHandler(new HandlerSocket(host, port));
  196. }
  197. /**
  198. *
  199. * Adds a handler that sends log records via e-mail
  200. *
  201. * @param from Address from which the e-mail is sent
  202. * @param to String array with recipients to send e-mail to
  203. * @param server Server address
  204. * @param subject Subject of e-mail
  205. * @param message Text in e-mail
  206. */
  207. public void addMailHandler (String from, String[] to,
  208. String server, String subject, String message) {
  209. addHandler(new HandlerMail(from, to, server, subject, message));
  210. }
  211. /**
  212. * Sets the level of the logger and all its handlers
  213. *
  214. * @param level
  215. */
  216. public void setLevel (Level level) {
  217. myLogger.setLevel(level);
  218. for (Handler h : myLogger.getHandlers()) {
  219. h.setLevel(level);
  220. }
  221. }
  222. /**
  223. * Logs a message on the logger of this manager
  224. *
  225. * @param level the level of the LogRecord
  226. * @param message The message to log
  227. */
  228. public void log (Level level, String message) {
  229. LogRecord record = new LogRecord(level, message);
  230. record.setSourceClassName(LoggerReflection.getCallerClassName());
  231. record.setSourceMethodName(LoggerReflection.getCallerMethodName());
  232. myLogger.log(record);
  233. }
  234. /**
  235. * Logs a FINER level message on the logger of this manager
  236. *
  237. * @param message The message to log
  238. */
  239. public void finer (String message) {
  240. log(Level.FINER, message);
  241. }
  242. /**
  243. * Logs a INFO level message on the logger of this manager
  244. *
  245. * @param message The message to log
  246. */
  247. public void info (String message) {
  248. log(Level.INFO, message);
  249. }
  250. /**
  251. * Logs a WARNING level message on the logger of this manager
  252. *
  253. * @param message The message to log
  254. */
  255. public void warning (String message) {
  256. log(Level.WARNING, message);
  257. }
  258. /**
  259. * Logs a SEVERE level message on the logger of this manager
  260. *
  261. * @param message The message to log
  262. */
  263. public void severe (String message) {
  264. log(Level.SEVERE, message);
  265. }
  266. /**
  267. * Gets the logger of this manager in case the user wants to
  268. * handle it for more complex instructions
  269. * @return The logger associated with this Manager
  270. */
  271. public Logger getLogger () {
  272. return myLogger;
  273. }
  274. /**
  275. * Removes all handlers from the current logger of this manager
  276. */
  277. public void clearHandlers () {
  278. for (Handler h : myLogger.getHandlers()) {
  279. myLogger.removeHandler(h);
  280. }
  281. }
  282. }