HytaleSentryHandler class
Пакет: com.hypixel.hytale.logger.sentry
Файл: com/hypixel/hytale/logger/sentry/HytaleSentryHandler.java
extends: Handler
Поля (28)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
String |
MECHANISM_TYPE |
|
LogManager |
var1 |
|
Hint |
var2 |
|
SentryLogLevel |
var2 |
|
String |
var2 |
|
Breadcrumb |
var2 |
|
SentryEvent |
var2 |
|
List |
var2 |
|
String |
var2 |
|
Object[] |
var3 |
|
String |
var3 |
|
Message |
var3 |
|
String |
var3 |
|
|
var3 |
|
|
var3 |
|
Hint |
var4 |
|
SentryAttributes |
var4 |
|
String |
var4 |
|
String |
var4 |
|
|
var4 |
|
String |
var5 |
|
|
var5 |
|
String |
var5 |
|
Throwable |
var5 |
|
String |
var6 |
|
Mechanism |
var6 |
|
SentryLogParameters |
var7 |
|
Throwable |
var7 |
Методы (23)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
private |
DropSentryFilterprivate DropSentryFilter() |
protected |
void |
captureLogvoid captureLog(@Nonnull LogRecord var1) |
|
|
for for(Object var6 : var1) |
|
|
if if(var2) |
|
|
if if(var1 != null) |
|
|
if if(var3 != null) |
|
|
if if(var4 != null) |
|
|
if if(var5 != null) |
|
|
if if(var5 != null) |
|
|
if if(var1 != null) |
|
|
if if(var6 != null) |
|
|
if if(this.printfStyle) |
|
|
if if(var1 != null) |
|
|
if if(var1 != null) |
|
|
if if(var1 != null) |
|
public boolean |
isLoggablepublic boolean isLoggable(@Nonnull LogRecord var1) |
public |
boolean |
isPrintfStyleboolean isPrintfStyle() |
private |
void |
retrievePropertiesvoid retrieveProperties() |
public |
void |
setMinimumBreadcrumbLevelvoid setMinimumBreadcrumbLevel(@Nullable Level var1) |
public |
void |
setMinimumEventLevelvoid setMinimumEventLevel(@Nullable Level var1) |
public |
void |
setMinimumLevelvoid setMinimumLevel(@Nullable Level var1) |
public |
void |
setPrintfStylevoid setPrintfStyle(boolean var1) |
abstract |
|
this this(var1, true) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.logger.sentry;
class="kw">import io.sentry.Breadcrumb;
class="kw">import io.sentry.Hint;
class="kw">import io.sentry.IScopes;
class="kw">import io.sentry.ScopesAdapter;
class="kw">import io.sentry.Sentry;
class="kw">import io.sentry.SentryAttribute;
class="kw">import io.sentry.SentryAttributes;
class="kw">import io.sentry.SentryEvent;
class="kw">import io.sentry.SentryIntegrationPackageStorage;
class="kw">import io.sentry.SentryLevel;
class="kw">import io.sentry.SentryLogLevel;
class="kw">import io.sentry.exception.ExceptionMechanismException;
class="kw">import io.sentry.logger.SentryLogParameters;
class="kw">import io.sentry.protocol.Mechanism;
class="kw">import io.sentry.protocol.Message;
class="kw">import java.text.MessageFormat;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Date;
class="kw">import java.util.List;
class="kw">import java.util.logging.Filter;
class="kw">import java.util.logging.Handler;
class="kw">import java.util.logging.Level;
class="kw">import java.util.logging.LogManager;
class="kw">import java.util.logging.LogRecord;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class HytaleSentryHandler class="kw">extends Handler {
class="kw">public class="kw">static class="kw">final String MECHANISM_TYPE = "JulSentryHandler";
class="kw">public class="kw">static class="kw">final String THREAD_ID = "thread_id";
class="kw">private class="kw">final IScopes scope;
class="kw">private boolean printfStyle;
@Nonnull
class="kw">private Level minimumBreadcrumbLevel = Level.INFO;
@Nonnull
class="kw">private Level minimumEventLevel = Level.SEVERE;
@Nonnull
class="kw">private Level minimumLevel = Level.INFO;
class="kw">public HytaleSentryHandler(@Nonnull IScopes var1) {
this(var1, true);
}
HytaleSentryHandler(@Nonnull IScopes var1, boolean var2) {
this.setFilter(new HytaleSentryHandler.DropSentryFilter());
if (var2) {
this.retrieveProperties();
}
this.scope = var1;
}
@Override
class="kw">public void publish(@Nonnull LogRecord var1) {
if (this.isLoggable(var1)) {
try {
if (ScopesAdapter.getInstance().getOptions().getLogs().isEnabled() && var1.getLevel().intValue() >= this.minimumLevel.intValue()) {
this.captureLog(var1);
}
if (var1.getLevel().intValue() >= this.minimumEventLevel.intValue()) {
Hint var2 = new Hint();
var2.set("syntheticException", var1);
this.scope.captureEvent(this.createEvent(var1), var2);
}
if (var1.getLevel().intValue() >= this.minimumBreadcrumbLevel.intValue()) {
Hint var4 = new Hint();
var4.set("jul:logRecord", var1);
Sentry.addBreadcrumb(this.createBreadcrumb(var1), var4);
}
} catch (RuntimeException var3) {
this.reportError("An exception occurred while creating a new event in Sentry", var3, 1);
}
}
}
class="kw">protected void captureLog(@Nonnull LogRecord var1) {
SentryLogLevel var2 = toSentryLogLevel(var1.getLevel());
Object[] var3 = var1.getParameters();
SentryAttributes var4 = SentryAttributes.of(new SentryAttribute[0]);
String var5 = var1.getMessage();
if (var1.getResourceBundle() != null && var1.getResourceBundle().containsKey(var1.getMessage())) {
var5 = var1.getResourceBundle().getString(var1.getMessage());
}
String var6 = this.maybeFormatted(var3, var5);
if (!var6.equals(var5)) {
var4.add(SentryAttribute.stringAttribute("sentry.message.template", var5));
}
SentryLogParameters var7 = SentryLogParameters.create(var4);
var7.setOrigin("auto.log.jul.hytale");
Sentry.logger().log(var2, var7, var6, var3);
}
@Nonnull
class="kw">private String maybeFormatted(@Nonnull Object[] var1, @Nonnull String var2) {
if (var1 != null) {
try {
class="kw">return this.formatMessage(var2, var1);
} catch (RuntimeException var4) {
}
}
class="kw">return var2;
}
class="kw">private void retrieveProperties() {
LogManager var1 = LogManager.getLogManager();
String var2 = HytaleSentryHandler.class.getName();
this.setPrintfStyle(Boolean.parseBoolean(var1.getProperty(var2 + ".printfStyle")));
this.setLevel(this.parseLevelOrDefault(var1.getProperty(var2 + ".level")));
String var3 = var1.getProperty(var2 + ".minimumBreadcrumbLevel");
if (var3 != null) {
this.setMinimumBreadcrumbLevel(this.parseLevelOrDefault(var3));
}
String var4 = var1.getProperty(var2 + ".minimumEventLevel");
if (var4 != null) {
this.setMinimumEventLevel(this.parseLevelOrDefault(var4));
}
String var5 = var1.getProperty(var2 + ".minimumLevel");
if (var5 != null) {
this.setMinimumLevel(this.parseLevelOrDefault(var5));
}
}
@Nullable
class="kw">private class="kw">static SentryLevel formatLevel(@Nonnull Level var0) {
if (var0.intValue() >= Level.SEVERE.intValue()) {
class="kw">return SentryLevel.ERROR;
} else if (var0.intValue() >= Level.WARNING.intValue()) {
class="kw">return SentryLevel.WARNING;
} else if (var0.intValue() >= Level.INFO.intValue()) {
class="kw">return SentryLevel.INFO;
} else {
class="kw">return var0.intValue() >= Level.ALL.intValue() ? SentryLevel.DEBUG : null;
}
}
@Nonnull
class="kw">private class="kw">static SentryLogLevel toSentryLogLevel(@Nonnull Level var0) {
if (var0.intValue() >= Level.SEVERE.intValue()) {
class="kw">return SentryLogLevel.ERROR;
} else if (var0.intValue() >= Level.WARNING.intValue()) {
class="kw">return SentryLogLevel.WARN;
} else if (var0.intValue() >= Level.INFO.intValue()) {
class="kw">return SentryLogLevel.INFO;
} else {
class="kw">return var0.intValue() >= Level.FINE.intValue() ? SentryLogLevel.DEBUG : SentryLogLevel.TRACE;
}
}
@Nonnull
class="kw">private Level parseLevelOrDefault(@Nonnull String var1) {
try {
class="kw">return Level.parse(var1.trim());
} catch (RuntimeException var3) {
class="kw">return Level.WARNING;
}
}
@Nonnull
class="kw">private Breadcrumb createBreadcrumb(@Nonnull LogRecord var1) {
Breadcrumb var2 = new Breadcrumb();
var2.setLevel(formatLevel(var1.getLevel()));
var2.setCategory(var1.getLoggerName());
if (var1.getParameters() != null) {
try {
var2.setMessage(this.formatMessage(var1.getMessage(), var1.getParameters()));
} catch (RuntimeException var4) {
var2.setMessage(var1.getMessage());
}
} else {
var2.setMessage(var1.getMessage());
}
class="kw">return var2;
}
@Nonnull
SentryEvent createEvent(@Nonnull LogRecord var1) {
SentryEvent var2 = new SentryEvent(new Date(var1.getMillis()));
var2.setLevel(formatLevel(var1.getLevel()));
var2.setLogger(var1.getLoggerName());
Message var3 = new Message();
var3.setParams(this.toParams(var1.getParameters()));
String var4 = var1.getMessage();
if (var1.getResourceBundle() != null && var1.getResourceBundle().containsKey(var1.getMessage())) {
var4 = var1.getResourceBundle().getString(var1.getMessage());
}
var3.setMessage(var4);
if (var1.getParameters() != null) {
try {
var3.setFormatted(this.formatMessage(var4, var1.getParameters()));
} catch (RuntimeException var8) {
}
}
var2.setMessage(var3);
Throwable var5 = var1.getThrown();
if (var5 != null) {
Mechanism var6 = new Mechanism();
var6.setType("JulSentryHandler");
Throwable var7 = new ExceptionMechanismException(var6, var5, Thread.currentThread());
var2.setThrowable(var7);
}
var2.setExtra("thread_id", String.valueOf(var1.getLongThreadID()));
class="kw">return var2;
}
@Nonnull
class="kw">private List<String> toParams(@Nullable Object[] var1) {
List var2 = new ArrayList<>();
if (var1 != null) {
for (Object var6 : var1) {
if (var6 != null) {
var2.add(var6.toString());
}
}
}
class="kw">return var2;
}
@Nonnull
class="kw">private String formatMessage(@Nonnull String var1, @Nullable Object[] var2) {
String var3;
if (this.printfStyle) {
var3 = String.format(var1, var2);
} else {
var3 = MessageFormat.format(var1, var2);
}
class="kw">return var3;
}
@Override
class="kw">public void flush() {
}
@Override
class="kw">public void close() class="kw">throws SecurityException {
try {
Sentry.close();
} catch (RuntimeException var2) {
this.reportError("An exception occurred while closing the Sentry connection", var2, 3);
}
}
class="kw">public void setPrintfStyle(boolean var1) {
this.printfStyle = var1;
}
class="kw">public void setMinimumBreadcrumbLevel(@Nullable Level var1) {
if (var1 != null) {
this.minimumBreadcrumbLevel = var1;
}
}
@Nonnull
class="kw">public Level getMinimumBreadcrumbLevel() {
class="kw">return this.minimumBreadcrumbLevel;
}
class="kw">public void setMinimumEventLevel(@Nullable Level var1) {
if (var1 != null) {
this.minimumEventLevel = var1;
}
}
@Nonnull
class="kw">public Level getMinimumEventLevel() {
class="kw">return this.minimumEventLevel;
}
class="kw">public void setMinimumLevel(@Nullable Level var1) {
if (var1 != null) {
this.minimumLevel = var1;
}
}
@Nonnull
class="kw">public Level getMinimumLevel() {
class="kw">return this.minimumLevel;
}
class="kw">public boolean isPrintfStyle() {
class="kw">return this.printfStyle;
}
class="kw">static {
SentryIntegrationPackageStorage.getInstance().addPackage("maven:io.sentry:sentry-jul", "8.30.0");
}
class="kw">private class="kw">static class="kw">final class DropSentryFilter class="kw">implements Filter {
class="kw">private DropSentryFilter() {
}
@Override
class="kw">public boolean isLoggable(@Nonnull LogRecord var1) {
String var2 = var1.getLoggerName();
class="kw">return var2 == null || !var2.startsWith("server.io.sentry") || var2.startsWith("server.io.sentry.samples");
}
}
}