docs: public void log(Level level, T key, long timeout, Object ... args) {
          SuppressCache.Value val=cache.putIfAbsent(key, timeout);
          if(val == null) // key is present and hasn't expired
              return;
  
          String message=val.count() == 1? String.format(message_format, args) :
            String.format(message_format, args) + " " + String.format(suppress_format, val.count(), key, val.age());
  
          switch(level) {
              case error:
                  log.error(message);
                  break;
              case warn:
                  log.warn(message);
                  break;
              case trace:
                  log.trace(message);
                  break;
          }
      }