HytaleConsole class

Пакет: com.hypixel.hytale.logger.backend

Файл: com/hypixel/hytale/logger/backend/HytaleConsole.java

extends: Thread

Поля (8)

МодификаторыТипИмя
final String TYPE_DUMB
return
return
List var1
int var1
String var2
var2
Consumer var3

Методы (14)

МодификаторыВозвратСигнатура
public HytaleLogFormatter getFormatterHytaleLogFormatter getFormatter()
if if(this.soutwriter != null)
if if(this.serrwriter != null)
if if(this.serrwriter != null)
if if(var3 != null)
if if(this.serrwriter != null)
public void publishvoid publish(@Nonnull LogRecord var1)
private void publish0void publish0(@Nonnull LogRecord var1)
public void setAbovePromptPrintervoid setAbovePromptPrinter(@Nullable Consumer<String> var1)
public void setTerminalvoid setTerminal(String var1)
private boolean shouldPrintAnsiboolean shouldPrintAnsi()
public void shutdownvoid shutdown()
static String stripTrailingNewlineString stripTrailingNewline(@Nonnull String var0)
abstract super super("HytaleConsole")

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.logger.backend;

class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOError;
class="kw">import java.io.OutputStreamWriter;
class="kw">import java.io.PrintWriter;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.BlockingQueue;
class="kw">import java.util.concurrent.LinkedBlockingQueue;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.logging.Level;
class="kw">import java.util.logging.LogRecord;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class HytaleConsole class="kw">extends Thread {
   class="kw">public class="kw">static class="kw">final String TYPE_DUMB = "dumb";
   class="kw">public class="kw">static class="kw">final HytaleConsole INSTANCE = new HytaleConsole();
   class="kw">private class="kw">final BlockingQueue<LogRecord> logRecords = new LinkedBlockingQueue<>();
   class="kw">private class="kw">final HytaleLogFormatter formatter = new HytaleLogFormatter(this::shouldPrintAnsi);
   @Nullable
   class="kw">private OutputStreamWriter soutwriter = new OutputStreamWriter(HytaleLoggerBackend.REAL_SOUT, StandardCharsets.UTF_8);
   @Nullable
   class="kw">private OutputStreamWriter serrwriter = new OutputStreamWriter(HytaleLoggerBackend.REAL_SERR, StandardCharsets.UTF_8);
   class="kw">private String terminalType = "dumb";
   @Nullable
   class="kw">private class="kw">volatile Consumer<String> abovePromptPrinter;

   class="kw">private HytaleConsole() {
      super("HytaleConsole");
      this.setDaemon(true);
      this.start();
   }

   class="kw">public void publish(@Nonnull LogRecord var1) {
      if (!this.isAlive()) {
         this.publish0(var1);
      } else {
         this.logRecords.offer(var1);
      }
   }

   @Override
   class="kw">public void run() {
      try {
         while (!this.isInterrupted()) {
            this.publish0(this.logRecords.take());
         }
      } catch (InterruptedException var2) {
         Thread.currentThread().interrupt();
      }
   }

   class="kw">public void shutdown() {
      this.interrupt();

      try {
         this.join();
      } catch (InterruptedException var5) {
         Thread.currentThread().interrupt();
      }

      List var1 = new ObjectArrayList();
      this.logRecords.drainTo(var1);
      var1.forEach(this::publish0);
      if (this.soutwriter != null) {
         try {
            this.soutwriter.flush();
         } catch (Exception var4) {
         }

         this.soutwriter = null;
      }

      if (this.serrwriter != null) {
         try {
            this.serrwriter.flush();
         } catch (Exception var3) {
         }

         this.serrwriter = null;
      }
   }

   class="kw">private void publish0(@Nonnull LogRecord var1) {
      String var2;
      try {
         var2 = this.formatter.format(var1);
      } catch (Exception var8) {
         if (this.serrwriter != null) {
            var8.printStackTrace(new PrintWriter(this.serrwriter));
         } else {
            var8.printStackTrace(System.err);
         }

         class="kw">return;
      }

      Consumer var3 = this.abovePromptPrinter;
      if (var3 != null) {
         try {
            var3.accept(stripTrailingNewline(var2));
            class="kw">return;
         } catch (Exception | IOError var9) {
         }
      }

      try {
         if (var1.getLevel().intValue() >= Level.SEVERE.intValue()) {
            if (this.serrwriter != null) {
               this.serrwriter.write(var2);

               try {
                  this.serrwriter.flush();
               } catch (Exception var6) {
               }
            } else {
               HytaleLoggerBackend.REAL_SERR.print(var2);
            }
         } else if (this.soutwriter != null) {
            this.soutwriter.write(var2);

            try {
               this.soutwriter.flush();
            } catch (Exception var5) {
            }
         } else {
            HytaleLoggerBackend.REAL_SOUT.print(var2);
         }
      } catch (Exception var7) {
      }
   }

   class="kw">public void setTerminal(String var1) {
      this.terminalType = var1;
   }

   class="kw">public void setAbovePromptPrinter(@Nullable Consumer<String> var1) {
      this.abovePromptPrinter = var1;
   }

   class="kw">private class="kw">static String stripTrailingNewline(@Nonnull String var0) {
      int var1 = var0.length();
      if (var1 > 0 && var0.charAt(var1 - 1) == '\n') {
         var1--;
         if (var1 > 0 && var0.charAt(var1 - 1) == '\r') {
            var1--;
         }
      }

      class="kw">return var0.substring(0, var1);
   }

   class="kw">private boolean shouldPrintAnsi() {
      class="kw">return !"dumb".equals(this.terminalType);
   }

   class="kw">public HytaleLogFormatter getFormatter() {
      class="kw">return this.formatter;
   }
}