2016-05-12 5 views
0

私はPythonで非常に新しいです。私はPythonでデーモンを作成しています。デーモンにはロガークラスがあります。 Loggerクラスは私のデーモン全体で使う必要があるものです。今ではクラスの新しいインスタンスをクラス内に作成したり、ロガークラスのオブジェクトを渡したりする代わりに、静的クラスのようなPHPを実装してデータベース接続をキャッシュするようにしたいので、インスタンス化せずにどこからでも呼び出せます、Like、Pythonの静的メソッドのようなPHP

Logger::log('This is cool'); 

どうすればいいですか?

+0

checkout:http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python – HuStmpHrrr

+0

既存のPythonロガー(例: 'logging'モジュール)やその実装を調べましたか?これはおそらく、この特定の問題の最初の方が良い方法でしょう。 – deceze

答えて

1

あなたはloggingモジュールを試すことがあります。 logging.getLogger必ず

この関数を指定して呼び出すと、同じロガーインスタンスが返されます。つまり、アプリケーションの異なる部分間でロガーインスタンスを渡す必要はありません。

たとえば、どこでも、logging.getLogger('the-logger-name')と呼び出すと、常に同じオブジェクトが取得されます。

ログをデータベースに書き込むには、handlerを実装する必要があります。これはデータベースに接続し、logger.addHanlderを通してロガーに接続します。

logging.Handlerから派生してハンドラを実装すると、すべてのメソッドをオーバーライドする必要はありません。BufferingHandlerがPythonのhandlers implementationでどのように動作するかをチェックアウトする必要はありません。

関連する問題