2016-03-23 4 views
0

をログに苦しんで、私はマルチスレッドのルール・エンジンの上にウェブUIを持っています。ほとんどの場合、Web UIはルールエンジンによって収集されたデータに標準のCRUDサービスを提供するとともに、ルールサービスの起動と停止を行うように設計されています。(フラスコ/モジュール/デバッグ)

フラスコロガー(current_app.logger)をモジュールレベルのログ出力に添付して、実行中のサービスごとに出力ログを構成したいとします。不全

簡単なテスト: rules.pyテスト機能:

def stupid_logging_test(): 
    logging.debug('Will flask log me?') 

admin.py

@admin.route('/', methods=['GET', 'POST']) 
def admin_root(): 
    #show the root admin page. 
    servers = current_app.config['instance_servers'] 
    metrics = None 
    if len(servers): 
     metrics = compileMetrics(servers) 
    # this includes starting/stopping rules engine and metrics 
    adminform = ServerAdminForm(request.form) 
    if request.method == 'POST': 
     if adminform.startserver.data: 
      current_app.logger.info('performing rule server start.') 
      start_source_servers() 
      #current_app.logger.debug(pprint.pformat(form)) 
      #current_app.logger.debug(str(tabledata)) 
     elif adminform.stopserver.data: 
      current_app.logger.info('performing rule server stop.') 
      stop_source_servers() 
      #current_app.logger.debug(pprint.pformat(form)) 
      #current_app.logger.debug(str(tabledata)) 
     else: 
      current_app.logger.info('unknown submit?') 
      current_app.logger.debug('debug line test.') 
      rules.stupid_logging_test() 

    return render_template("admin_main.html", adminform=adminform, 
      metrics=metrics, servers=servers) 

ログ出力(コンソール):

-------------------------------------------------------------------------------- 
INFO in admin [/<snip>/admin.py:51]: 
unknown submit? 
-------------------------------------------------------------------------------- 
INFO:ui:unknown submit? 
-------------------------------------------------------------------------------- 
DEBUG in admin [/<snip>/admin.py:52]: 
debug line test. 
-------------------------------------------------------------------------------- 
DEBUG:ui:debug line test. 

logging output (file)

ここ
unknown submit? 
debug line test. 

そして最後に、私のロギング設定(今のところ)

ui:__init__.py

# ... other app config 
log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20) 
if 'DEBUG' in app.config and app.config['DEBUG']: 
    log_target.setLevel(logging.DEBUG) 
else: 
    log_target.setLevel(logging.WARN) 
app.logger.addHandler(log_target) 
rules_logger = getLogger('rules') 
rules_logger.addHandler(log_target) 
app.config['core_log'] = log_target 

は、私は私の問題は、getLoggerメソッドに関係している感覚を得るです。私はロガーに名前を与えているわけではありませんが、デフォルトはモジュール自体の名前だと思いますか?

+0

ui:__init__.py:以下の変更は、問題を解決しましたか?あなたはcurrent_app.logger' 'に'デバッグラインtest'を記録したがrules.pyに、あなたは、それらが異なるならば、明らかに、彼らは別のログに行くを提供していないいくつかの 'logging'変数にログインします。 –

+0

@ TadhgMcDonald-Jensenそれはちょうどロギングモジュールです。私が読んだドキュメンテーションにはこれに関する少しの混乱があるようです。あなたは、モジュール内の特定のロガーを設定する場合に推奨される方法は、 '' mylogger =のgetLogger(__名前__) ''しかし、単に特定のロガーを設定せずに、直接ロギングモジュールを使用することが有効であると思わを行うことです。上記とTadhgMcDonald・ジェンセン@ – SkyLeach

+0

は、モジュールレベルの ''ロガー= logging.getLogger(__ __名) ''も失敗しているようだ、と述べました。 – SkyLeach

答えて

0

ハンドラのログレベルを正しく設定していません。 `に等しいlogging`れるものrules.pyに

log_target = RotatingFileHandler(app.config['LOGFILE'], maxBytes=1024 * 1024 * 100, backupCount=20) 
loggers = [app.logger, getLogger('rules')] 
for logger in loggers: 
    if 'DEBUG' in app.config and app.config['DEBUG']: 
     logger.setLevel(logging.DEBUG) 
    else: 
     logger.setLevel(logging.WARN) 
    logger.addHandler(log_target) 
app.config['core_log'] = log_target