2010-09-20 27 views
5

Tôi đang làm việc trên ứng dụng Giá treo chạy trên Apache với mod_wsgi. Tôi muốn gửi thư đăng nhập mà ứng dụng của tôi tạo ra cho các tệp trong thư mục của ứng dụng của tôi, thay vì các nhật ký của Apache. Hơn nữa, tôi muốn xác định vị trí của logfiles thông qua một đường dẫn tương đối để nó sẽ được dễ dàng hơn để triển khai ứng dụng của tôi trên các máy chủ của người khác. Ngay bây giờ tôi có thể đăng nhập vào các tập tin, nhưng chỉ thông qua một đường dẫn tuyệt đối mong manh.Sử dụng đường dẫn tương đối để ghi tệp trong developmentylini của Pylons

Dưới đây là phần có liên quan của tập tin development.ini tôi:

# Logging configuration 
[loggers] 
keys = root, routes, myapp, sqlalchemy, debugging-logger 

[handlers] 
keys = console, debugging-logger-file 

[formatters] 
keys = generic 

[logger_debugging-logger] 
level = DEBUG 
handlers = debugging-logger-file 
qualname = myapp.controllers.logging-test-controller.debugging-logger 

[handler_debugging-logger-file] 
class = FileHandler 
args = ('/var/pylons/myapp/logs/myapp-debugging-errors.log', 'a') 
level = DEBUG 
formatter = generic 

Mặc dù .ini helpfully khuyên sử dụng% (ở đây) là để chỉ đường dẫn hiện tại, sử dụng% (ở đây) s trong "args = ('foo')" dòng của trình xử lý lỗi không hoạt động theo cách mà tôi mong đợi. Cú pháp của tệp ini này là documented on the Paste Deploy site, nhưng không chỉ định cách% (ở đây) s có thể được sử dụng liên quan đến chuỗi được trích dẫn.

Tôi nên sử dụng cú pháp nào trong dòng "args = ('foo')" để chỉ định đường dẫn hiện tại?

Trả lời

7

Vấn đề là Paste Deploy tạo ra một đối tượng ConfigParser để lưu trữ thẻ 'here' trong tập hợp các giá trị mặc định, và logging.config.fileConfig() không bao giờ chuyển bộ mặc định đó. Do đó, khi fileConfig() đọc tệp .ini, nó không có quyền truy cập vào thẻ 'here' và nội suy của ConfigParser không thể tìm thấy nó.

Bạn có thể làm một cái gì đó như thế này:

[DEFAULT] 
my_log_dir = '/var/pylons/myapp/logs' 
... 
[handler_debugging-logger-file] 
args = (%(my_log_dir)s + '/myapp-debugging-errors.log', 'a') 

Không chính xác những gì bạn đang tìm kiếm, nhưng một chút nhỏ bé có thể cấu hình nhiều hơn nữa.

Một khả năng khác là:

args = (os.getcwd() + '/myapp-debugging-errors.log', 'a') 

(này hoạt động vì 'os' là một biến hợp lệ trong không gian tên module đăng nhập khi nó gọi eval() trên giá trị args Nhưng đây là một chi tiết thi hành. đăng nhập gói có thể không đáng tin cậy lâu dài.) Nhưng điều này rất có thể sẽ không cung cấp cho bạn những gì bạn muốn-- nó rất có thể sẽ sử dụng thư mục làm việc của tiến trình Apache.

Bạn thậm chí có thể thiết lập một biến môi trường bên ngoài chương trình, và sử dụng nó như:

args = (os.environ['MY_LOG_DIR'] + '/myapp-debugging-errors.log', 'a') 

Tuy nhiên khả năng khác là trọng hành vi của một số chức năng hoặc các phương pháp lớp trong module đăng nhập hoặc dán gói .

Hy vọng chúng sẽ cung cấp cho bạn một số ý tưởng.

+0

Ah, điều đó khiến tôi vượt qua bướu não. Cảm ơn bạn. Tôi đang sử dụng tùy chọn đầu tiên cho bây giờ - ít nhất nó ngăn tôi không bị DRY, bởi vì tôi đang tách các tin nhắn thành một vài tệp nhật ký khác nhau. –

0

Tệp cấu hình cho Dán Triển khai cho phép thẻ 'ở đây' để chỉ ra thư mục chứa tệp cấu hình. Sau đó bạn có thể làm việc liên quan đến điều đó.

+0

Tôi đã cập nhật câu hỏi bằng cách làm rõ câu trả lời của bạn. –

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