/src/main/java/org/util/LogUtil.java

https://github.com/nothize/suite · Java · 84 lines · 61 code · 22 blank · 1 comment · 4 complexity · 2e394ca4508abadfcb8c745745aace05 MD5 · raw file

  1. package org.util;
  2. import java.io.PrintWriter;
  3. import org.apache.commons.logging.LogFactory;
  4. import org.apache.log4j.ConsoleAppender;
  5. import org.apache.log4j.DailyRollingFileAppender;
  6. import org.apache.log4j.Level;
  7. import org.apache.log4j.Logger;
  8. import org.apache.log4j.PatternLayout;
  9. import sun.reflect.Reflection;
  10. public class LogUtil {
  11. private static boolean initialized = false;
  12. private static int maxStackTraceLength = 99;
  13. public static void initLog4j() {
  14. if (!initialized)
  15. initLog4j(Level.INFO);
  16. }
  17. public static void initLog4j(Level level) {
  18. String caller = Reflection.getCallerClass(2).getSimpleName();
  19. PatternLayout layout = new PatternLayout("%d %-5p [%c{1}] %m%n");
  20. ConsoleAppender console = new ConsoleAppender(layout);
  21. console.setWriter(new PrintWriter(System.out));
  22. console.activateOptions();
  23. DailyRollingFileAppender file = new DailyRollingFileAppender();
  24. file.setFile("logs/" + caller + ".log");
  25. file.setDatePattern("'.'yyyyMMdd");
  26. file.setLayout(layout);
  27. file.activateOptions();
  28. Logger logger = Logger.getRootLogger();
  29. logger.setLevel(level);
  30. logger.removeAllAppenders();
  31. logger.addAppender(console);
  32. logger.addAppender(file);
  33. initialized = true;
  34. }
  35. public static void info(String cat, String message) {
  36. initLog4j();
  37. LogFactory.getLog(cat).info(message);
  38. }
  39. public static void error(Class<?> clazz, Throwable th) {
  40. error(clazz.getName(), th);
  41. }
  42. public static void error(String cat, Throwable th) {
  43. initLog4j();
  44. boolean isTrimmed = trimStackTrace(th);
  45. LogFactory.getLog(cat).error(isTrimmed ? "(Trimmed)" : "", th);
  46. }
  47. private static boolean trimStackTrace(Throwable th) {
  48. boolean isTrimmed = false;
  49. // Trims stack trace to appropriate length
  50. while (th != null) {
  51. StackTraceElement st0[] = th.getStackTrace();
  52. if (st0.length > maxStackTraceLength) {
  53. StackTraceElement st1[] = new StackTraceElement[maxStackTraceLength];
  54. Util.copyArray(st0, 0, st1, 0, maxStackTraceLength);
  55. th.setStackTrace(st1);
  56. isTrimmed = true;
  57. }
  58. th = th.getCause();
  59. }
  60. return isTrimmed;
  61. }
  62. }