2017-01-09 29 views
0

おはよう!Django Rest FrameworkでDjangoにアクションログを記録する方法

Django 1.10.4のアクションをDjango Rest Frameworkでログに記録し、ファイルに保存する必要があります。

私は別のシリアライザと関数を持っています。私は、ドキュメントを読んで、非常に私は私が持っている、などCREATEなどのアクションをログUPDATEまたは私は例えば

を送信していたデータを削除するために何をすべきか理解していませんでした:

class MySerializer(serializers.HyperlinkedModelSerializer): 
    def create(self, validated_data): 
     ...some code... 
     return object 

    def update(self, instance, validated_data): 
     ...some code... 
     return instance 

これを行うにはどうすればよいのですか?

答えて

1

良い一日、仲間Stackoverflowerに記載されています!

この手順を順を追って説明します。

まず、Django loggerを宣言する必要があります。これは基本的にファイルハンドラの一種であり(あなたの場合、ファイルに書きたいので)、いくつかの追加機能があります。

最も簡単なロガーは(あなたのsettings.py内)のようなものになります

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'file': { 
      'level': 'DEBUG', 
      'class': 'logging.FileHandler', 
      'filename': '/path/to/django/debug.log', 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['file'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
    }, 
} 

次に、あなたが何かをログに記録する各ファイルには、最初にロガーへの参照を取得する必要があります。

import logging 
logger = logging.getLogger(__name__) 

これで、ロガーができたので、任意のログを記録することができます。あなたの例からのコードは次のようになります。

class MySerializer(serializers.HyperlinkedModelSerializer): 
    def create(self, validated_data): 
     ...some code... 
     logger.info('Information incoming!') 
     return object 

    def update(self, instance, validated_data): 
     ...some code... 
     logger.error('Something went wrong!') 
     return instance 

しかし、私はあなたがこれはあなたが持っている各シリアライザのためを行うことにしたい気持ちを持っています。それが事実なら、私に知らせてください、私は私の答えを広げます。

幸運を祈る!

+0

ああ、ありがとうございます!あなたの答えは、私が見たものの中で最高であり、明確な要約形式です!今私は最終的にそれを理解する=)私はまた、http://django-simple-history.readthedocs.io/en/latest/index.htmlのようないくつかのパッケージを見つけましたが、1.10 Djangoでは動作しません。また、あなたの気持ちはまったく正しいです、アイデアは各シリアライザのログを作ることです。あなたがそれを与えるならば、私はこのケースのためのさらに良い解決策があるなら私はうれしいでしょう! – urDMG

+0

それを聞いてうれしい。初心者の方は、通常は安定しており、十分にテストされているので、パッケージを使用することを強くお勧めします。ここでは、履歴/監査に使用される複数のパッケージ(https://djangopackages.org/grids/g/model-audit/)を比較します。 Django 1.10と互換性のあるものがいくつか見つかります。しかし、これらはDjangoのみで動作し、DRFの存在を利用しないことに注意してください(つまり、ロギングはシリアライザ/ビューではなくモデルで実行されます)。私の答えを広げるために、私はまた、いくつかのビュー(ロギングがあるべき場所)を見る必要があります。 Thx – AdelaN

+0

@AdelaNインスタンスを作成または更新する方法。オブジェクト%sが作成された "%unicode(instance)"のようなものをログに記録しますか? – Don

関連する問題