old_contents: #!/usr/bin/env python
  #
  # Licensed to the Apache Software Foundation (ASF) under one or more
  # contributor license agreements.  See the NOTICE file distributed with
  # this work for additional information regarding copyright ownership.
  # The ASF licenses this file to You under the Apache License, Version 2.0
  # (the "License"); you may not use this file except in compliance with
  # the License.  You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  
  import sys
  import os
  from twisted.application import service, internet
  
  sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
  
  from svnwcsub import ReloadableConfig, BigDoEverythingClasss
  
  application = service.Application("SvnWcSub")
  
  def get_service():
      m = service.MultiService()
      c = ReloadableConfig("/etc/svnwcsub.conf")
      big = BigDoEverythingClasss(c, service=m)
      return m
  
  service = get_service()
  service.setServiceParent(application)
  
new_contents: #!/usr/bin/env python
  #
  # Licensed to the Apache Software Foundation (ASF) under one or more
  # contributor license agreements.  See the NOTICE file distributed with
  # this work for additional information regarding copyright ownership.
  # The ASF licenses this file to You under the Apache License, Version 2.0
  # (the "License"); you may not use this file except in compliance with
  # the License.  You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  #
  
  import sys
  import os
  from twisted.application import service, internet
  
  sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
  
  import svnwcsub
  
  application = service.Application("SvnWcSub")
  
  def get_service():
      m = service.MultiService()
      c = svnwcsub.ReloadableConfig("/etc/svnwcsub.conf")
      big = svnwcsub.BigDoEverythingClasss(c, service=m)
      return m
  
  service = get_service()
  service.setServiceParent(application)
  
  
  ### crazy hack. the first time Twisted logs something, we will track down
  ### the logfile it is using, then use that for the Python logging framework
  from twisted.python import log
  import logging
  
  def capture_log(unused_msg):
      for ob in log.theLogPublisher.observers:
          if hasattr(ob, 'im_class') and ob.im_class is log.FileLogObserver:
              flo = ob.im_self
              logfile = flo.write.im_self
              stream = logfile._file
  
              ### the follow is similar to svnwcsub.prepare_logging()
              handler = logging.StreamHandler(stream)
              formatter = logging.Formatter(
                              '%(asctime)s [%(levelname)s] %(message)s',
                              '%Y-%m-%d %H:%M:%S')
              handler.setFormatter(formatter)
  
              # Apply the handler to the root logger
              root = logging.getLogger()
              root.addHandler(handler)
  
              ### use logging.INFO for now
              root.setLevel(logging.INFO)
  
              # okay. remove our capture function.
              log.removeObserver(capture_log)
  
  # hook in the capturing...
  log.addObserver(capture_log)
  
subject: Use a crazy hack to inject Twisted's log output into the Python logging framework.