5

私はlogging.debug(xxx)を呼び出しているパッケージを持っている状況にあります。このパッケージですべてのロギングステートメントを無効にしたい。configを介してそれを行う方法はありますか?

たとえば、私が実行するすべてのクエリは、開発サーバーのコンソールに出力されます。

DEBUG:root:SELECTエンティティ。path、Entities.entity FROM "dev〜xxxx !! Entities" AS Entities INNER JOIN "dev〜xxxx !! EntitiesByProperty" AS ebp_0ONEntities。パス=ebp_0。パスINNERJOIN"dev〜xxxx !! EntitiesByProperty" AS ebp_1ONEntities。パス=ebp_1。パスINNERJOIN"dev〜xxxx !! EntitiesByProperty" AS ebp_2ONEntities。パス=ebp_2。パスWHEREebp_0.kind=:1 AND ebp_0.name =:2 AND ebp_0.value =:3 AND ebp_1.kind =:4 AND ebp_1.name =:5 AND ebp_1.value =:6 AND ebp_2.kind =:7 AND ebp_2.name =:8 AND ebp_2.value =:9エンティティによる順序付け。パスASC

だから私はSDKソースを変更することによってそれを無効にする方法を知っています、基本的にログステートメントをコメントアウトします__StarSchemaQueryPlan

logging.debug(query)

SDKコードに触れずにロギングを無効にする方法はありますか?現在、loggingConfigurationsは定義しておらず、basicConfigurorを使用しています。


最終的な解決策は@lucemiaに感謝します:

class Filter(object):
    def filter(self, record):
        if record.funcName=='__StarSchemaQueryPlan' and record.module=='datastore_sqlite_stub':
            return 0
        else:
            return 1
4

1 に答える 1

8

ログレベルの変更を試みることができます。

モジュールはデフォルトのロガーを使用したため。次のコードは、クリティカルよりもレベルが小さいすべてのログを無効にします。

import logging
logger = logging.getLogger() # get the default logger
logger.setLevel(50) # set the skip all log which is smaller than critical (50)

テストケース

a_lib.py

import logging

def main():
    logging.error("test")
    logging.critical('c')

a_test_case.py

import a_lib
import logging

logger = logging.getLogger()
logger.setLevel(50)
a_lib.main()

結果

> python a_test.py
CRITICAL:root:c

編集1

これを行う別の方法は、フィルターを使用することです

import logging

# define a new filter
class Filter():
    def filter(self, record):
        # extract property of record such as record.funcName, record.module
        # http://docs.python.org/2/library/logging.html#logrecord-attributes


        if record.module == "a_lib":
            # if the record is from a module you don't want to log
            return 0
        else:
           # for record you want to log
            return 1



 # apply this filter

 filter = Filter()
 logger= logging.getLogger()
 logger.addFilter(filter)
于 2012-12-19T17:51:21.517 に答える