0

関数でアクションをログに記録しようとしています。次の関数を作成して、応答のタイプ、つまり情報、エラー、デバッグ、警告に基づいてさまざまなファイルへの応答をログに記録しました。

logging.basicConfig(filename='indivi_service.log',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
def setup_logger(logger_name, log_file, level=logging.DEBUG):
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter()
    fileHandler = logging.FileHandler(log_file)
    fileHandler.setFormatter(formatter)
    handler = TimedRotatingFileHandler(logger_name,
                               when="d",
                               interval=1,
                               backupCount=100)


l.setLevel(level)
l.addHandler(fileHandler)
l.addHandler(handler)


setup_logger('debug', r'debug')
setup_logger('error', r'error')
setup_logger('warning', r'warning')
setup_logger('info', r'info')
debug = logging.getLogger('debug')
error = logging.getLogger('error')
warning = logging.getLogger('warning')
info = logging.getLogger('info')


class Info(APIHandler):
    @gen.coroutine
    def post(self):
        req = json.loads(self.request.body)
        resp, content = client(item_id=req['item_id'])
        debug.debug(content)
        info.info(hello world)
        warning.warn('warning message')
        error.error('error message')

私が直面している問題は、関数を呼び出すたびに応答が 2 回出力されることです。

例: info.log

hello world hello world

なぜそれが起こっているのか誰にも教えてもらえますか。これは、すべてのログ ファイルに当てはまります。

ありがとう

4

1 に答える 1

0

試す:

import logging
import logging.handlers

logging.basicConfig(filename='indivi_service.log',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
def setup_logger(logger_name, log_file, level=logging.DEBUG):
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler = logging.handlers.TimedRotatingFileHandler(str(log_file)+'.log', when="d", interval=1, backupCount=100)
    handler.setFormatter(formatter)

    l.setLevel(level)
    l.addHandler(handler)


setup_logger('debug', r'debug')
setup_logger('error', r'error')
setup_logger('warning', r'warning')
setup_logger('info', r'info')
debug = logging.getLogger('debug')
error = logging.getLogger('error')
warning = logging.getLogger('warning')
info = logging.getLogger('info')


if __name__ == "__main__":
    info.info('hello world')
    error.info('hello world')

このスクリプトを実行した後、ファイル info.log には 1 つの「hello world」があり、error.log にも 1 つの「hello world」しかありません。

于 2015-10-30T08:42:28.377 に答える