2012-03-09 15 views
10

Djangoプロジェクトにmainという名前のアプリがあります。このアプリは、私がログに記録したいいくつかの管理コマンドがありますが、何も次のような構成で標準出力に現れていない:私は間違ってカスタム管理コマンドのDjangoロギング

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'log_to_stdout': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'stream': sys.stdout, 
      }, 
     }, 
    'loggers': { 
     'main': { 
      'handlers': ['log_to_stdout'], 
      'level': 'DEBUG', 
      'propagate': True, 
      } 
     } 
    } 

をしていますか?私もmy_project.mainを使ってみましたが、それでもうまくいきませんでした。私は1.3.0のファイナルを使用しています。

+0

をしたいですか? – second

+0

私は 'logging.info'と' logging.debug'を試しましたが、どちらも動作しません。この質問を書いた後、私は 'logging.warn' *が私にstdoutへのプリントを与えていることに気付きました。 – damd

答えて

12

あなたのロガーを名前空間にする必要があります。現在、あなたはmain

ではなく、logging.debug("message")を探しているあなたのハンドラによってキャッチされていないルートロガーにログインしている、あなたはどのようなコマンド使用すると、ログ出力をするために使用している

logger = logging.getLogger('main') 
logger.debug("message") 
1

"stream"をsys.stdoutに設定する必要はありません。ただし、フォーマッタを定義する必要があります。

例:あなたがcronをしてこれらのカスタムコマンドを登録している場合

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'log_to_stdout': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'simple', 
      }, 
     }, 
    'loggers': { 
     'main': { 
      'handlers': ['log_to_stdout'], 
      'level': 'DEBUG', 
      'propagate': True, 
     } 
    } 
} 
+0

私は、あなたのサンプルコードをそのままコピーして貼り付けてみましたが、それでも私は標準出力に何も得ません。 *しかし*、 'logging.warn( 'foo')'を最初のステートメントとして挿入すると、stdoutでプリントを取得します。 'logging.info'と' logging.debug'はまだ動作しません。 – damd

-2

、あなただけのテキストファイルに出力をリダイレクトすることにより、「力」のロギングすることができます。

* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

この

は毎朝午前12時でcronジョブを実行すると、標準出力に向け何が(Pythonのprint文のような)ログファイル内の既存のテキストに連結、このテキスト・ファイルにダンプされます。

cronを使用していない場合は、実行する必要があるすべてのスクリプトを実行する単一のシェルスクリプトを作成し、必要なログファイルに手動で指示します。

python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

...など。

+0

ありがとう、これは私が以前に使った方法です。私は正しいことをしようとしていると、Djangoの "組み込み"ロギング機能を可能な限り使用しています。 – damd

+0

十分に良い。うまくいけば、誰かが踏み込んでこれを手伝ってくれるでしょう。私は原始的で、シェルのリダイレクトを使用します。 :) – patrickn

関連する問題