/src/minecraft/net/minecraft/logging/LogAgent.java

https://bitbucket.org/codelore/xserver · Java · 219 lines · 171 code · 30 blank · 18 comment · 24 complexity · 1961cb5ed5c3b90018de475ccc6c8a8f MD5 · raw file

  1. package net.minecraft.logging;
  2. import cpw.mods.fml.common.FMLLog;
  3. import cpw.mods.fml.relauncher.Side;
  4. import cpw.mods.fml.relauncher.SideOnly;
  5. import java.util.logging.ConsoleHandler;
  6. import java.util.logging.FileHandler;
  7. import java.util.logging.Handler;
  8. import java.util.logging.Level;
  9. import java.util.logging.Logger;
  10. import net.minecraft.server.MinecraftServer;
  11. import java.io.File; // CraftBukkit
  12. // Forge start
  13. import java.text.MessageFormat;
  14. import java.util.logging.Formatter;
  15. import java.util.logging.LogRecord;
  16. import cpw.mods.fml.common.FMLLog;
  17. import cpw.mods.fml.relauncher.FMLRelaunchLog;
  18. // Forge end
  19. public class LogAgent implements ILogAgent
  20. {
  21. private final Logger serverLogger;
  22. private final String logFile;
  23. private final String loggerName;
  24. private final String loggerPrefix;
  25. public static Logger global = Logger.getLogger(""); // CraftBukkit
  26. public LogAgent(String par1Str, String par2Str, String par3Str)
  27. {
  28. this.serverLogger = Logger.getLogger(par1Str);
  29. this.loggerName = par1Str;
  30. this.loggerPrefix = par2Str;
  31. this.logFile = par3Str;
  32. this.setupLogger();
  33. }
  34. /**
  35. * Sets up the logger for usage.
  36. */
  37. private void setupLogger()
  38. {
  39. this.serverLogger.setUseParentHandlers(false);
  40. //this.serverLogger.setParent(FMLLog.getLogger()); // MCPC+ - do not send to FML log, only CB
  41. Handler[] ahandler = this.serverLogger.getHandlers();
  42. int i = ahandler.length;
  43. for (int j = 0; j < i; ++j)
  44. {
  45. Handler handler = ahandler[j];
  46. this.serverLogger.removeHandler(handler);
  47. }
  48. LogFormatter logformatter = new LogFormatter(this, (LogAgentINNER1)null);
  49. // CraftBukkit start
  50. MinecraftServer server = MinecraftServer.getServer();
  51. ConsoleHandler consolehandler = new org.bukkit.craftbukkit.util.TerminalConsoleHandler(server.reader);
  52. // CraftBukkit end
  53. consolehandler.setFormatter(logformatter);
  54. this.serverLogger.addHandler(consolehandler);
  55. // CraftBukkit start
  56. for (java.util.logging.Handler handler : global.getHandlers())
  57. {
  58. global.removeHandler(handler);
  59. }
  60. // MCPC+ start
  61. if (!FMLRelaunchLog.useOnlyThisLogger)
  62. {
  63. consolehandler.setFormatter(new org.bukkit.craftbukkit.util.ShortConsoleLogFormatter(server));
  64. }
  65. else
  66. {
  67. consolehandler.setFormatter(new Formatter()
  68. {
  69. @Override
  70. public String format(final LogRecord record)
  71. {
  72. return MessageFormat.format(record.getMessage(), record.getParameters()).concat("\n");
  73. }
  74. });
  75. }
  76. // MCPC+ end
  77. global.addHandler(consolehandler);
  78. // CraftBukkit end
  79. try
  80. {
  81. // CraftBukkit start
  82. String pattern = (String) server.options.valueOf("log-pattern");
  83. // We have to parse the pattern ourself so we can create directories as needed (java #6244047)
  84. String tmpDir = System.getProperty("java.io.tmpdir");
  85. String homeDir = System.getProperty("user.home");
  86. if (tmpDir == null)
  87. {
  88. tmpDir = homeDir;
  89. }
  90. // We only care about parsing for directories, FileHandler can do file names by itself
  91. File parent = new File(pattern).getParentFile();
  92. StringBuilder fixedPattern = new StringBuilder();
  93. String parentPath = "";
  94. if (parent != null)
  95. {
  96. parentPath = parent.getPath();
  97. }
  98. int j = 0;
  99. while (j < parentPath.length())
  100. {
  101. char ch = parentPath.charAt(j);
  102. char ch2 = 0;
  103. if (j + 1 < parentPath.length())
  104. {
  105. ch2 = Character.toLowerCase(pattern.charAt(j + 1));
  106. }
  107. if (ch == '%')
  108. {
  109. if (ch2 == 'h')
  110. {
  111. j += 2;
  112. fixedPattern.append(homeDir);
  113. continue;
  114. }
  115. else if (ch2 == 't')
  116. {
  117. j += 2;
  118. fixedPattern.append(tmpDir);
  119. continue;
  120. }
  121. else if (ch2 == '%')
  122. {
  123. // Even though we don't care about this we have to skip it to avoid matching %%t
  124. j += 2;
  125. fixedPattern.append("%%");
  126. continue;
  127. }
  128. else if (ch2 != 0)
  129. {
  130. throw new java.io.IOException("log-pattern can only use %t and %h for directories, got %" + ch2);
  131. }
  132. }
  133. fixedPattern.append(ch);
  134. j++;
  135. }
  136. // Try to create needed parent directories
  137. parent = new File(fixedPattern.toString());
  138. if (parent != null)
  139. {
  140. parent.mkdirs();
  141. }
  142. int limit = (Integer) server.options.valueOf("log-limit");
  143. int count = (Integer) server.options.valueOf("log-count");
  144. boolean append = (Boolean) server.options.valueOf("log-append");
  145. FileHandler filehandler = new FileHandler(pattern, limit, count, append);
  146. // CraftBukkit end
  147. filehandler.setFormatter(logformatter);
  148. this.serverLogger.addHandler(filehandler);
  149. global.addHandler(filehandler); // CraftBukkit
  150. }
  151. catch (Exception exception)
  152. {
  153. this.serverLogger.log(Level.WARNING, "Failed to log " + this.loggerName + " to " + this.logFile, exception);
  154. }
  155. }
  156. public void logInfo(String par1Str)
  157. {
  158. this.serverLogger.log(Level.INFO, par1Str);
  159. }
  160. @SideOnly(Side.SERVER)
  161. public Logger getServerLogger()
  162. {
  163. return this.serverLogger;
  164. }
  165. public void logWarning(String par1Str)
  166. {
  167. this.serverLogger.log(Level.WARNING, par1Str);
  168. }
  169. public void logWarningFormatted(String par1Str, Object ... par2ArrayOfObj)
  170. {
  171. this.serverLogger.log(Level.WARNING, par1Str, par2ArrayOfObj);
  172. }
  173. public void logWarningException(String par1Str, Throwable par2Throwable)
  174. {
  175. this.serverLogger.log(Level.WARNING, par1Str, par2Throwable);
  176. }
  177. public void logSevere(String par1Str)
  178. {
  179. this.serverLogger.log(Level.SEVERE, par1Str);
  180. }
  181. public void logSevereException(String par1Str, Throwable par2Throwable)
  182. {
  183. this.serverLogger.log(Level.SEVERE, par1Str, par2Throwable);
  184. }
  185. static String func_98237_a(LogAgent par0LogAgent)
  186. {
  187. return par0LogAgent.loggerPrefix;
  188. }
  189. }