2016-09-11 29 views
1

私はloggingモジュールを使用するPythonライブラリを使用します。しかし、自分のスクリプトで内部的に使用するlogという関数を作成しました。ロギング情報を引数として関数に渡す

def log(name, content, swtch : bool = None, time = None): 
    time = time or datetime.now(pytz.timezone('US/Pacific')) 
    if swtch == True or swtch == None: 
     toPrint = '{1.RED}{2}/{3}/{4} {5}:{6}:{7}:{8} {9} {0.BRIGHT}{1.GREEN}{10} {0.RESET_ALL}{11}{0.RESET_ALL}'.format(
      Style, 
      Fore, 
      str(time.month).zfill(2), 
      str(time.day).zfill(2), 
      str(time.year)[2:], 
      str(time.hour % 12).zfill(2), 
      str(time.minute).zfill(2), 
      str(time.second).zfill(2), 
      str(int(time.microsecond/1000)).zfill(3), 
      'AM' if time.hour < 12 else 'PM', 
      name, 
      content 
     ) 

     print(toPrint) 

    log_txt = '' 

    if swtch == False or swtch == None: 
     file = open('log.txt', 'r') 
     log_txt = file.read() 
     file.close() 

     with open('log.txt', 'w') as file: 
      text = '{0}/{1}/{2} {3}:{4}:{5}:{6} {7} {8} {9}'.format(
       str(time.month).zfill(2), 
       str(time.day).zfill(2), 
       str(time.year)[2:], 
       str(time.hour % 12).zfill(2), 
       str(time.minute).zfill(2), 
       str(time.second).zfill(2), 
       str(int(time.microsecond/1000)).zfill(3), 
       'AM' if time.hour < 12 else 'PM', 
       name, 
       content 
      ) 
      file.write(log_txt + text + '\n') 

レッツ仕事がsome_loggerという名前のロガーがありますと仮定:

は、ここで私が利用したいロギング機能です。

import logging 

log = logging.getLogger('some_logger') 

代わりに他の関数に(ログ情報を表す)、代わりに標準出力に印刷、位置引数を渡す方法はありますか? (明確にする:logを必要なargsで呼び出す関数)

+0

使用したいコードを表示してください。 –

+0

よろしくお願いいたします。尋ねるThx – Dev

答えて

0

これを行うにはHandlerオブジェクトを使用することができます。 emitを実装するサブクラスを定義する必要があります。基本的な設定については、下記の例をご覧ください。

import logging 

class CustomHandler(logging.Handler): 
    def emit(record): 
     log(record.levelname, record.msg) 

logging.getLogger('some_logger').addHandler(CustomHandler()) 
関連する問題