2017-01-19 12 views
0

私はPythonロギングサーバーと2つのテストアプリケーションと1つの共有モジュール(submod.py)を持っています。両方のアプリケーションがサーバーにログイベントを送信し、それらを別々のログファイルに格納する方法を決めます。これは、共有モジュールがログを記録するまではかなり簡単です。サブモジュールがログイベントを送信して正しいログファイルに格納するプログラムをサーバーが識別できるようにする方法はわかりません。Pythonロギング - dictConfig - サブモジュールのロギング先

マイロギングサーバは、私は次のような辞書ロギング設定を使用するように変更しようとした私は

hereを発見したコードを少し変更したバージョンです:

test_log.conf

"handlers": { 
      "console": { 
       "class": "logging.StreamHandler", 
       "level": "DEBUG", 
       "formatter": "complex", 
       "stream": "ext://sys.stdout" 
      }, 
      "test_01": { 
       "class": "logging.handlers.RotatingFileHandler", 
       "level": "INFO", 
       "formatter": "complex", 
       "filename": "test_01.log", 
       "mode": "a", 
       "backupCount": 5, 
       "encoding": "utf8" 
      }, 
      "test_02": { 
       "class": "logging.handlers.RotatingFileHandler", 
       "level": "INFO", 
       "formatter": "complex", 
       "filename": "test_02.log", 
       "mode": "a", 
       "backupCount": 5, 
       "encoding": "utf8" 
      }, 
      "file": { 
       "class": "logging.handlers.RotatingFileHandler", 
       "level": "INFO", 
       "formatter": "complex", 
       "filename": "root.log", 
       "mode": "a", 
       "backupCount": 5, 
       "encoding": "utf8" 
      } 
     }, 
     "loggers": { 
      "root": { 
       "level": "INFO", 
       "handlers": ["console", "file"] 
      }, 
      "test_01":{ 
       "level": "INFO", 
       "handlers": ["console", "test_01"] 
      }, 
      "test_02": { 
       "level": "INFO", 
       "handlers": ["console", "test_02"] 
      } 
     } 

test_01.py

main_logger = logging.getLogger('') 
main_logger.setLevel(logging.DEBUG) 

socketHandler = logging.handlers.SocketHandler('localhost', logging.handlers.DEFAULT_TCP_LOGGING_PORT) 

main_logger.addHandler(socketHandler) 

logging.info('Test 01 main program') 

a = submod.SubClass() 

test_02.py

main_logger = logging.getLogger('') 
main_logger.setLevel(logging.DEBUG) 

socketHandler = logging.handlers.SocketHandler('localhost', logging.handlers.DEFAULT_TCP_LOGGING_PORT) 

main_logger.addHandler(socketHandler) 

logging.info('Test 02 main program') 

a = submod.SubClass() 

submod.py私はロギングサーバを持つことができますどのように

class SubClass(object): 
    def __init__(self): 
     log = logging.getLogger() 
     log.debug('Debug') 
     log.info('Info') 
     log.warn('Warning') 
     log.error('Error') 
     log.critical('Critical') 
     print(__name__) 

インテリジェントsubmod.pyからのメッセージをログに記録する場所を知っているときtest_01両方とtest_02が呼び出しています。

私はこの書式設定と混乱している説明をお詫びします。この問題は、この時点で私にとって脳損傷を引き起こしています。

編集: わかりやすく改悪するために、

答えて

0

ログファイルを使用するプログラムに基づいてログファイルの保存先を事前に定義できる設定ファイルを使用してください。 Pythonの「ロギング」モジュールは、必要なすべてのタスクを実行します。ここに設定ファイルの例があります:http://www.zetadev.com/software/aspen/trunk/doc/html/logging-conf.html

+0

あなたが参照している設定がわかっているので、それは問題を解決しません。同じサブモジュールを使用する複数のプログラムに適用できる動的な設定をしようとしていますが、サブモジュールからのメッセージを各メインプログラムのログファイルにいつ保存するかをサーバーがインテリジェントに判断するようにしてください。 – Chex

+0

これはどうですか? https://docs.python.org/2/howto/logging-cookbook.html#using-logging-in-multiple-modules – postoronnim

+0

これはうまくいくかもしれませんが、アプリケーション間でモジュールを再利用して、親を静的に割り当てることを望んでいました少し痛みです。呼び出された「親」を特定する方法はありますか?または、変数として呼び出す親の名前を渡して設定するだけですか? – Chex

関連する問題