DropSentryFilter class

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

Файл: com/hypixel/hytale/logger/sentry/HytaleSentryHandler.java

implements: Filter

Поля (1)

МодификаторыТипИмя
String var2

Методы (1)

МодификаторыВозвратСигнатура
public boolean isLoggablepublic boolean isLoggable(@Nonnull LogRecord var1)

Исходный код

Показать/скрыть
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");
      }
   }
}