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