2012-02-09 31 views
7

Tôi đang sử dụng django + uwsgi cho một dự án web. Nhưng tôi tìm thấy một số bản ghi django sẽ bị mất sau khi uwsgi đang chạy trong một thời gian!một số nhật ký django bị thiếu khi lưu trữ trong uwsgi với nhiều quá trình

Tình huống là: tôi định cấu hình uwsgi với 8 quy trình. Khi tôi bắt đầu uwsgi, tất cả các bản ghi django sẽ được viết trong tệp nhật ký duy nhất. Nhưng sau một vài giờ, một số nhật ký không được ghi trong tệp. Tôi đã so sánh tệp nhật ký django với tệp nhật ký uwsgi. Tôi chỉ tìm thấy một yêu cầu của quá trình uwsgi đã được viết bằng tập tin django. Các bản ghi django khác của quá trình 7 bị thiếu. Khi tôi khởi động lại uwsgi, nó là kết quả tương tự.

Có ai biết về điều này không?

Cảm ơn,

django đăng nhập của tôi cấu hình:

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'formatters': { 
    'simple': { 
     'format': '%(levelname)s %(asctime)s %(message)s' 
    }, 
    'detail': { 
     'format': '%(levelname)s %(asctime)s [%(module)s.%(funcName)s line:%(lineno)d] %(message)s', 
    }, 
}, 
'handlers': { 
    'file': { 
     'level': 'INFO', 
     'formatter': 'simple', 
     'class': 'logging.handlers.TimedRotatingFileHandler', 
     'filename': LOG_FILE, 
     'when': 'midnight', 
     'backupCount': 366, 
    }, 
    'err_file': { 
     'level': 'WARN', 
     'formatter': 'detail', 
     'class': 'logging.handlers.TimedRotatingFileHandler', 
     'filename': LOG_ERR_FILE, 
     'when': 'midnight', 
     'backupCount': 366, 
    }, 
}, 
'loggers': { 
    'django_request': { 
     'handlers': ['file', 'err_file'], 
     'level': 'DEBUG', 
     'propagate': True, 
    }, 
} 
} 

uwsgi tôi config:

<uwsgi> 
<socket>0.0.0.0:8888</socket> 
<chdir>src_dir</chdir> 
<pythonpath>..</pythonpath> 
<module>wsgi</module> 
<workers>4</workers> 
<processes>8</processes> 
<master>true</master> 
<pidfile>uwsgi.pid</pidfile> 
<enable-threads>true</enable-threads> 
<logdate>true</logdate> 
<daemonize>/log/uwsgi/uwsgi.log</daemonize> 
</uwsgi> 

Trả lời

2

này là bởi vì nó không phải là an toàn để viết thư cho cùng một tập tin từ một số người lao động. Bạn nên viết các bản ghi các tập tin khác nhau từ mỗi người lao động, hoặc cố gắng sử dụng SysLogHandler

http://docs.python.org/library/logging.handlers.html

/etc/rsyslog.d/local-myapp.conf:

local0.*       -/var/log/myapp/app.log 

settings.py:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'user': { 
      '()': 'core.log.UserFilter', 
     } 
    }, 
    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(user)s %(message)s' 
     }, 
     'simple': { 
      'format': '%(levelname)s %(asctime)s %(module)s %(user)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'class': 'django.utils.log.AdminEmailHandler', 
      'filters': ['user'], 
     }, 
     'syslog':{ 
      'level': 'INFO', 
      'class': 'logging.handlers.SysLogHandler', 
      'formatter': 'verbose', 
      'filters': ['user'], 
      'facility': 'local0', 
      'address': '/dev/log', 
     }, 
    }, 
    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
    }, 
    'root': { 
     'handlers': ['syslog'], 
     'level': 'INFO', 
    } 
} 

Bạn cũng có thể thử viết thông điệp tường trình vào bảng điều khiển và để uwsgi tự viết nhật ký.

Các vấn đề liên quan