2014-12-19 14 views
6

düzgün piton günlüğü tesisi kullanmak benim django settings.py yapılandırmak çalışıyorum arasında dosyaya ama oldukça garip bir sorun tökezledi ettik:Günlüğü django.request yerine konsolda

bile docs, ben sadece okuduktan sonra Konsol yazdırılan hata ayıklama istek satırlarını Django'dan, belirttiğim bir dosyaya nasıl yönlendirileceğini bulamıyor; Aşağıda benim kayıt yapılandırmamın bir parçası var. Aşağıdaki biçimde benim konsol baskı hattını görmeye devam

LOGGING = { 
    'version': 1, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    } 
    'handlers': { 
     'file_http': { 
      'level': 'DEBUG', 
      'class': 'logging.FileHandler', 
      'filename': r'C:\mysystem-http.log', 
      'formatter': 'verbose' 
     } 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['file_http'], 
      'level': 'DEBUG', 
      'propagate': False 
     } 
    } 
} 

:

[19/Dec/2014 11:48:03] "POST /api/v1/ HTTP/1.1" 200 10

nasıl günlüğü tesisi kullanarak bir dosyaya bu yönlendirebilir?

Şimdiden teşekkürler

+0

: Bir çok işlemli kurulum varsa, bir dosyaya giriş kadar iyi bir fikir, cf olmayabilir

Django 1.10 yılında

, runserver çıkış günlük geçer https://docs.python.org/3/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes –

cevap

3

yılında Bu çıkışlar HTTP sunucusu (standart kütüphaneden WSGIServer dev modunda çalışan varsa) tarafından işlenir.

settings.py'in yapılandırması ile bir alakası yok.

+0

Doğru. Öyleyse, bu kütüphanenin çıktısını kayıt tesisini kullanarak yeniden yönlendirmenin bir yolu var mı? – kstratis

+0

Yığına bağlı. –

6

manage.py runserver, [19/Dec/2014 11:48:03] "POST /api/v1/ HTTP/1.1" 200 10 gibi mesajlar için kayıt sistemini kullanmaz. Bunun yerine, runserver sys.stderr (ve diğer iletiler için sys.stdout) kullanır. Bunu gerçekten dosyaya yönlendirmeniz gerekiyorsa, sys.stderr settings.py dosyasını geçersiz kılabilirsiniz. Örnek - Dosyaya sys.stderr ve konsol günlüğü:

import sys 

class Logger(object): 
    def __init__(self): 
     self.console = sys.stderr 
     self.file = open("runserver.log", "a", 0) 

    def write(self, msg): 
     self.console.write(msg) 
     self.file.write(msg) 

sys.stderr = Logger() 

siz de KAYITLARI ayarları tarafından bu işlemek için günlük sistemini kullanabilirsiniz yazma yönteminde.

Güncelleme: Sadece kayıt için https://docs.djangoproject.com/en/dev/releases/1.10/#runserver-output-goes-through-logging

+0

Bu nasıl daha iyi bir bash yönlendirmesidir? –

+0

Basit, daha iyi değil (belki de bunun bir nedeni dosya + konsola aynı anda giriş yapabilmeniz ve filtre/formatlayıcılar ekleyebilmeniz vb.). – dikamilo