code: synchronized static TraceSpecification setTraceSpec(String spec) {
          // If logger is used & configured by logger properties, 
          // we're done as far as trace string processing is concerned
          if (WsLogManager.isConfiguredByLoggingProperties()) {
              return null;
          }
  
          // If the specified string is null, or it is equal to a string,
          // or the sensitive flag has not been toggled,
          // we've already parsed, skip it.
          if ((spec == null || spec.equals(traceString)) && Tr.activeTraceSpec.isSensitiveTraceSuppressed() == suppressSensitiveTrace) {
              return null;
          }
  
          traceString = spec;
  
          // Parse the trace specification string, this will gather
          // exceptions that occur for different elements of the string
          TraceSpecification newTs = new TraceSpecification(spec, safeLevelsIndex, suppressSensitiveTrace);
          TraceSpecificationException tex = newTs.getExceptions();
  
          if (tex != null) {
              do {
                  tex.warning(loggingConfig.get() != null);
                  tex = tex.getPreviousException();
              } while (tex != null);
          }
  
          Tr.setTraceSpec(newTs);
  
          // Return the new/updated TraceSpecification to the caller. The caller can
          // then determine whether or not all elements of the TraceSpecification 
          // were known to the system or not.
          return newTs;
      }
docs: Set the trace specification of the service to the input value.
  
  @param spec New string trace specification
  @return new TraceSpecification, or null if unchanged