code: public static synchronized void init(LogProviderConfig config) {
          if (config == null)
              throw new NullPointerException("LogProviderConfig must not be null");
  
          if (loggingConfig.get().compareAndSet(null, config)) {
              // Only initialize Tr once -- all subsequent changes go through update
              // The synchronization of this method is gratuitous (just makes us feel better), 
              // it is called while the system is single threaded at startup. 
  
              // config.getTrDelegate() must not return null -- it should either
              // return a dummy/disabled delegate, or throw an exception so that startup
              // does not proceed.
              final TrService tr = config.getTrDelegate();
              if (tr == null)
                  throw new NullPointerException("LogProviderConfig must provide a TrService delegate");
              Callable<TrService> result = new Callable<TrService>() {
                  @Override
                  public TrService call() throws Exception {
                      return tr;
                  }
              };
              delegate = StaticValue.mutateStaticValue(delegate, result);
              delegate.get().init(config);
  
              // Validate and propagate the initial trace specification 
              setTraceSpec(config.getTraceString());
  
              // Set class that we want the LogManager to instantiate when someone
              // calls getLogger: This logger interacts only with the Tr/FFDC API: 
              // it is not dependent on the implementation of the underlying delegate
              WsLogManager.setWsLogger(com.ibm.ws.logging.internal.WsLogger.class);
          }
      }
docs: Initialize Tr (and underlying Tr service).