title: NameError: global name 'logger' is not defined
body: <p>I wrote a logging.json file from where the logging configuration is setup after which i created a class in which all my methods will be there but for logging when i use logger inside the class it is throwing error <code>NameError: global name 'logger' is not defined</code></p>
  
  <p><strong>app.py</strong></p>
  
  <pre><code>#/usr/bin/python
  
  import sys
  import logging
  import time
  import json
  import os
  import logging.config
  
  def setup_logging(default_path='logging.json',default_level=logging.INFO,env_key='LOG_CFG'):
      """Setup logging configuration"""
      path = default_path
      value = os.getenv(env_key, None)
      if value:
          path = value
      if os.path.exists(path):
          with open(path, 'rt') as f:
              config = json.load(f)
          logging.config.dictConfig(config)
      else:
          logging.basicConfig(level=default_level)
  
  class Generic:
  
          def __init__(self , file_path):
                  self.file_path = file_path
  
          def check_mime(self):
                  logger.info('Generic on file {} starts at {}'.format(file_path , time.time()))
  
  
  print 'File path is {}'.format(sys.argv[1])
  file_path = sys.argv[1]
  
  def parser():
          parser = Generic(file_path)
          parser.check_mime()
  def main():
          print 'This is intended for module purpose only'
          setup_logging()
          parser()
  
  if __name__ == '__main__':
          main()
  </code></pre>
  
  <p><strong>logging.json</strong></p>
  
  <pre><code>{
      "version": 1,
      "disable_existing_loggers": false,
      "formatters": {
          "simple": {
              "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
          }
      },
  
      "handlers": {
          "console": {
              "class": "logging.StreamHandler",
              "level": "DEBUG",
              "formatter": "simple",
              "stream": "ext://sys.stdout"
          },
  
          "info_file_handler": {
              "class": "logging.handlers.RotatingFileHandler",
              "level": "INFO",
              "formatter": "simple",
              "filename": "logs/gp.log",
              "maxBytes": 10485760,
              "backupCount": 20,
              "encoding": "utf8"
          },
  
          "error_file_handler": {
              "class": "logging.handlers.RotatingFileHandler",
              "level": "ERROR",
              "formatter": "simple",
              "filename": "logs/errors.log",
              "maxBytes": 10485760,
              "backupCount": 20,
              "encoding": "utf8"
          }
      },
  
      "loggers": {
          "my_module": {
              "level": "ERROR",
              "handlers": ["console"],
              "propagate": "no"
          }
      },
  
      "root": {
          "level": "INFO",
          "handlers": ["console", "info_file_handler", "error_file_handler"]
      }
  }
  </code></pre>
  
  <p>Problem :</p>
  
  <p>When i run the program error</p>
  
  <pre><code>$ python app.py /home/default/domain.txt
  File path is /home/default/domain.txt
  This is intended for module purpose only
  Traceback (most recent call last):
    File "app.py", line 44, in &lt;module&gt;
      main()
    File "app.py", line 41, in main
      parser()
    File "app.py", line 37, in parser
      parser.check_mime()
    File "app.py", line 29, in check_mime
      logger.info('GenericParser
  NameError: global name 'logger' is not defined
  </code></pre>
  
  <p>Iam using the logging example following in this link [ <a href="https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/" rel="noreferrer">https://fangpenlin.com/posts/2012/08/26/good-logging-practice-in-python/</a> ]</p>
  
  <p>Any suggestions on how to solve this as logger is not global, any way to make it global.?</p>