2016-04-21 19 views
6

Tôi muốn viết một số thông tin nhật ký từ tập lệnh chính của python vào một tệp trong/var/log.Thực hành tốt nhất để ghi nhật ký trong/var/log từ tập lệnh python?

Khi tôi gọi logger.info("Starting"), tôi nhận được PermissionError trên tệp, điều này khá bình thường vì tệp trong/var/log thuộc về gốc và chương trình của tôi không chạy dưới dạng gốc.

Tôi có thể đặt tất cả các quyền của /var/log/my.log để cho phép myapp viết vào đó. (Đặt cùng một nhóm chẳng hạn). Nhưng nó không giống như một thực hành tốt cho tôi: nếu tôi cài đặt myapp trên một máy tính khác thì sao? Tôi có nên thay đổi quyền trên tệp nhật ký trong quá trình cài đặt không? Hoặc có cách nào khác chung hơn để làm điều đó? (Giống như một cách chung chung để gửi nhật ký cho "hệ thống"? Bằng cách chung chung tôi cũng có nghĩa là cũng di động, những gì sẽ làm việc trên linux, freebsd, vv)

Mặc dù tôi không chắc chắn nó có liên quan, thông tin, đây là một số phần của mã của tôi:

kịch bản chi tiết:

import logging, logging.config 

from lib import settings 
settings.init() 

logging.config.fileConfig(settings.logging_conf_file) 
logger = logging.getLogger(__name__) 

việc xử lý phù hợp với settings.logging_conf_file, trong file ghi cấu hình:

[handler_mainHandler] 
class=FileHandler 
level=INFO 
formatter=defaultFormatter 
filemode=w 
args=('/var/log/myapp.log',) 

Trả lời

6

Nếu syslogd đang chạy trên của bạn , bạn có thể thử sử dụng SysLogHandler để tránh vấn đề với quyền truy cập thư mục (https://docs.python.org/2/library/logging.handlers.html#sysloghandler).

Để chỉ định danh mục của bạn, bạn cần đặt thông số cơ sở thành mong muốn, ví dụ: LOG_LOCAL5. Trong trường hợp này, nó sẽ tương ứng với local5. * Category of syslogd.

Khi bạn chỉ định cơ sở làm tham số trình xử lý, nhưng không phải tên tệp, bạn cần điều chỉnh cấu hình nhật ký hệ thống để nói syslogd ghi nhật ký nhật ký vào tệp cụ thể. Trong FreeBSD, tập tin conf syslog là /etc/syslog.conf (syslog.conf (5)).

Ngoài ra, bạn có thể thêm ánh xạ syslog như . tới /var/log/all.log để xử lý tất cả nhật ký từ tất cả các nhà sản xuất syslog. Sẽ rất hữu ích nếu xác định xem đăng nhập có hoạt động hay không và danh mục ứng dụng của bạn là gì, nếu có nghi ngờ.

Đối rsyslogd, nó có thể để có được thêm thông tin ở đây: How to configure rsyslog for use with SysLogHandler logging class?

+0

Điều này có vẻ tốt cho FreeBSD, nhưng tiếc là hộp linux của tôi đã không syslogd chạy theo mặc định. Thay vào đó nó có rsyslogd và nó dường như không nghe bất kỳ cổng nào. Tôi vẫn cần phải tìm hiểu làm thế nào để cấu hình nó đúng và xem nếu SysLogHandler sẽ làm việc với rsyslogd quá. – zezollo

+0

Vẫn đang vật lộn để định cấu hình này. Đã phải hỏi [một câu hỏi khác] (http://stackoverflow.com/questions/36793037/how-to-configure-rsyslog-for-use-with-sysloghandler-logging-class). – zezollo

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