docs: public void log(final Level level, final String msg, final Throwable throwable) {
          switch (level) {
              case ERROR:
                  if (proxy.isErrorEnabled()) {
                      if (proxy instanceof LocationAwareLogger) {
                          ((LocationAwareLogger) proxy).log(null, FQCN, LocationAwareLogger.ERROR_INT, msg, null, throwable);
                      } else {
                          proxy.error(msg, throwable);
                      }
                  }
  
                  break;
              case WARN:
                  if (proxy.isWarnEnabled()) {
                      if (proxy instanceof LocationAwareLogger) {
                          ((LocationAwareLogger) proxy).log(null, FQCN, LocationAwareLogger.WARN_INT, msg, null, throwable);
                      } else {
                          proxy.warn(msg, throwable);
                      }
                  }
  
                  break;
              case INFO:
                  if (proxy.isInfoEnabled()) {
                      if (proxy instanceof LocationAwareLogger) {
                          ((LocationAwareLogger) proxy).log(null, FQCN, LocationAwareLogger.INFO_INT, msg, null, throwable);
                      } else {
                          proxy.info(msg, throwable);
                      }
                  }
  
                  break;
              case DEBUG:
                  if (proxy.isDebugEnabled()) {
                      if (proxy instanceof LocationAwareLogger) {
                          ((LocationAwareLogger) proxy).log(null, FQCN, LocationAwareLogger.DEBUG_INT, msg, null, throwable);
                      } else {
                          proxy.debug(msg, throwable);
                      }
                  }
  
                  break;
              case TRACE:
                  if (proxy.isTraceEnabled()) {
                      if (proxy instanceof LocationAwareLogger) {
                          ((LocationAwareLogger) proxy).log(null, FQCN, LocationAwareLogger.TRACE_INT, msg, null, throwable);
                      } else {
                          proxy.trace(msg, throwable);
                      }
                  }
  
                  break;
              default:
                  throw new IllegalStateException("Logging level [" + level + "] is invalid");
          }
      }