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;
}
}