Slf4jSimpleLoggingCustomizer.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright The OpenTelemetry Authors
  3. * SPDX-License-Identifier: Apache-2.0
  4. */
  5. package io.opentelemetry.javaagent.logging.simple;
  6. import com.google.auto.service.AutoService;
  7. import io.opentelemetry.javaagent.bootstrap.InternalLogger;
  8. import io.opentelemetry.javaagent.tooling.LoggingCustomizer;
  9. import java.util.Locale;
  10. import org.slf4j.LoggerFactory;
  11. @AutoService(LoggingCustomizer.class)
  12. public final class Slf4jSimpleLoggingCustomizer implements LoggingCustomizer {
  13. // org.slf4j package name in the constants will be shaded too
  14. private static final String SIMPLE_LOGGER_SHOW_DATE_TIME_PROPERTY =
  15. "org.slf4j.simpleLogger.showDateTime";
  16. private static final String SIMPLE_LOGGER_DATE_TIME_FORMAT_PROPERTY =
  17. "org.slf4j.simpleLogger.dateTimeFormat";
  18. private static final String SIMPLE_LOGGER_DATE_TIME_FORMAT_DEFAULT =
  19. "'[otel.javaagent 'yyyy-MM-dd HH:mm:ss:SSS Z']'";
  20. private static final String SIMPLE_LOGGER_DEFAULT_LOG_LEVEL_PROPERTY =
  21. "org.slf4j.simpleLogger.defaultLogLevel";
  22. private static final String SIMPLE_LOGGER_PREFIX = "org.slf4j.simpleLogger.log.";
  23. @Override
  24. public void init() {
  25. setSystemPropertyDefault(SIMPLE_LOGGER_SHOW_DATE_TIME_PROPERTY, "true");
  26. setSystemPropertyDefault(
  27. SIMPLE_LOGGER_DATE_TIME_FORMAT_PROPERTY, SIMPLE_LOGGER_DATE_TIME_FORMAT_DEFAULT);
  28. if (isDebugMode()) {
  29. setSystemPropertyDefault(SIMPLE_LOGGER_DEFAULT_LOG_LEVEL_PROPERTY, "DEBUG");
  30. setSystemPropertyDefault(SIMPLE_LOGGER_PREFIX + "okhttp3.internal.http2", "INFO");
  31. } else {
  32. // by default muzzle warnings are turned off
  33. setSystemPropertyDefault(SIMPLE_LOGGER_PREFIX + "muzzleMatcher", "OFF");
  34. }
  35. // trigger loading the provider from the agent CL
  36. LoggerFactory.getILoggerFactory();
  37. InternalLogger.initialize(Slf4jSimpleLogger::create);
  38. }
  39. @Override
  40. @SuppressWarnings("SystemOut")
  41. public void onStartupFailure(Throwable throwable) {
  42. // not sure if we have a log manager here, so just print
  43. System.err.println("OpenTelemetry Javaagent failed to start");
  44. throwable.printStackTrace();
  45. }
  46. @Override
  47. public void onStartupSuccess() {}
  48. private static void setSystemPropertyDefault(String property, String value) {
  49. if (System.getProperty(property) == null) {
  50. System.setProperty(property, value);
  51. }
  52. }
  53. /**
  54. * Determine if we should log in debug level according to otel.javaagent.debug
  55. *
  56. * @return true if we should
  57. */
  58. private static boolean isDebugMode() {
  59. String tracerDebugLevelSysprop = "otel.javaagent.debug";
  60. String tracerDebugLevelProp = System.getProperty(tracerDebugLevelSysprop);
  61. if (tracerDebugLevelProp != null) {
  62. return Boolean.parseBoolean(tracerDebugLevelProp);
  63. }
  64. String tracerDebugLevelEnv =
  65. System.getenv(tracerDebugLevelSysprop.replace('.', '_').toUpperCase(Locale.ROOT));
  66. if (tracerDebugLevelEnv != null) {
  67. return Boolean.parseBoolean(tracerDebugLevelEnv);
  68. }
  69. return false;
  70. }
  71. }