2017-01-16 20 views
0

クラウドウォッチからイベントログを収集し、2つのファイルに書き込み、各ファイルの内容をメールで送信するスクリプトを作成しました。私は2通の電子メールを受信したいように、各ロガーは、ログの異なるタイプを持って、私は2つのロガー作成:メインで2つの異なるロガーの2つのファイルハンドラーが同じ内容を取得

logLevel = logging.INFO 
doWait = object() 
if os.path.exists ('.debug'): 
    logLevel = logging.DEBUG 
logger1 = logging.getLogger() 
logger2 = logging.getLogger() 
logger1.setLevel(logLevel) 
logger2.setLevel(logLevel) 
formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s') 
fileHandler1 = os.path.join('/tmp/', 'error-admin-' + datetime.datetime.utcnow().strftime('%Y-%m-%d') + '.log') 
fileHandler2 = os.path.join('/tmp/', 'error-user-' + datetime.datetime.utcnow().strftime('%Y-%m-%d') + '.log') 
fh1 = logging.handlers.RotatingFileHandler(fileHandler) 
fh2 = logging.handlers.RotatingFileHandler(fileHandler2) 
fh1.setLevel(logLevel) 
fh2.setLevel(logLevel) 
fh1.setFormatter(formatter) 
fh2.setFormatter(formatter) 
logger1.addHandler(fh1) 
logger2.addHandler(fh2) 

を、私はそのような関数を呼び出す:今すぐ

function1(arg1,arg2,logger1) 
function2(arg1,arg2,logger2) 

、私の問題私がスクリプトを実行すると、両方のファイルハンドラーに同じ内容が得られます。たとえ、私がロガーを分離したとしても同じです。なぜそれが起こるのですか?

+0

を、なぜそれが二つの異なる結果すべきですか? – iFlo

+0

それぞれのロガーにはファイルハンドラーがあり、イベントを収集する関数を呼び出すと、eather logger1またはlogger2 @iFloを呼び出してログを書きたいファイルを指定します。 – JavaQueen

答えて

1

これは、ルートLogger下でlogger1logger2両方の点ので起こります。 docsから

Multiple calls to getLogger() with the same name will always return a reference to the same Logger object.

次の2つの別々のLoggerオブジェクト必要があります:あなたはあなたの2つのロガーとまったく同じことをやっている

logger1 = logging.getLogger('error-admin') 
logger2 = logging.getLogger('error-user') 
+0

ありがとうございました – JavaQueen

関連する問題