2009-08-16 52 views
13

Nếu một ứng dụng viết một ứng dụng Công cụ ứng dụng Django/Google và muốn có các nhật ký dễ thấy dễ dàng dựa trên màu sắc (tức là các lỗi màu đỏ), thì làm thế nào để thiết lập?Làm cách nào để tạo màu ghi nhật ký trong Django/Google App Engine?

Tôi đã sao chép giải pháp hữu ích từ this question, nhưng tôi không chắc chắn cách tích hợp nó vào Django/Google App Engine.

I figured người ta sẽ đặt sau đây trong main.py của ứng dụng (ví dụ cơ bản từ ví dụ ở đây: Running Django on Google App Engine):

from contrib.utils import ColouredLogger # from the SO question above 
logging.setLoggerClass(ColouredLogger) 

... nơi contrib.utils là nơi tôi đặt mã airmind từ ở trên liên kết đến câu trả lời SO của anh ấy.

Tuy nhiên, điều đó dường như không làm gì với đầu ra cho bảng điều khiển cho GAE, tiếp tục ở định dạng gốc + màu đơn giản.

Đề xuất và đầu vào sẽ được đánh giá cao.

Chúc mừng, Brian

Trả lời

2

Các mã reset được đề cập trong câu trả lời của bạn liên quan đến sẽ làm việc trên một giao diện điều khiển trong máy chủ phát triển địa phương (nhưng có thể sẽ mất một số tinh chỉnh - bạn sẽ phải chuỗi nó với hiện tại Trình xử lý ghi nhật ký của App Engine), nhưng sẽ không hoạt động trong sản xuất, vì trong các mục nhật ký sản xuất được xuất ra một trang HTML trong bảng điều khiển quản trị của bạn.

Tuy nhiên, bạn có thể lọc theo cấp độ nhật ký trong bảng điều khiển dành cho quản trị viên.

+0

Cám ơn trả lời, Nick. Đó là phần chuỗi mà tôi đang gặp rắc rối. :) –

2

Tôi không tin rằng bạn nên tạo một phân lớp logger chỉ cho câu trả lời này - airmind là tốt như xa như việc tạo ra một chuyên ngành Formatter và xác định việc sử dụng nó trên StreamHandler. Nhưng không cần cho một phân lớp logger. Trong thực tế, việc sử dụng một lớp logger của airmind thêm một trình xử lý cho mỗi trình ghi được tạo ra, đó không phải là những gì bạn muốn.

Airmind giải pháp chỉ cung cấp các tác phẩm cho các thiết bị đầu cuối hỗ trợ chuỗi ANSI thoát - bạn có chắc chắn rằng giao diện điều khiển của bạn hỗ trợ chúng không?

+0

Cảm ơn Vinay. Có, thiết bị đầu cuối của tôi hỗ trợ màu ANSI. –

2

Đây là một formater mẫu:

class Formatter(logging.Formatter) : 
    _level_colors = { 
     "DEBUG": "\033[22;32m", "INFO": "\033[01;34m", 
     "WARNING": "\033[22;35m", "ERROR": "\033[22;31m", 
     "CRITICAL": "\033[01;31m" 
    };  

    def format(self, record): 
     if(Formatter._level_colors.has_key(record.levelname)): 
      record.levelname = "%s%s\033[0;0m" % \ 
          (Formatter._level_colors[record.levelname], 
          record.levelname) 
     record.name = "\033[37m\033[1m%s\033[0;0m" % record.name 
     return logging.Formatter.format(self, record)  

Bạn cần phải cấu hình nó, ví dụ:

... 
[formatters] 
keys=console_formatter 
... 
[handler_console_handler] 
class=StreamHandler 
formatter=console_formatter 
args=(sys.stdout,) 
3

Tôi cũng muốn ra màu cho dev_appserver. Tôi đã tìm thấy các giải pháp ở đây một chút OTT (tất cả những gì tôi muốn là thực hiện các cuộc gọi logging.error() của mình. Tôi đã kết thúc mô đun khai thác gỗ bằng cách thả nó vào main.py của mình như một giải pháp nhanh:

# monkey patch logger to dump ERRORs in red 
import os 
if os.environ['SERVER_SOFTWARE'].find('Development') >= 0: 
    import logging 
    old_error = logging.error 
    def red_error(msg,*args,**kwargs): 
     old_error("\033[22;31m%s\033[0;0m" % msg, *args, **kwargs) 
    logging.error = red_error 

này sẽ chỉ cho vào thiết bị đầu cuối ANSI màu

17

chúng tôi sử dụng colorlog và nó thực hiện chính xác những gì bạn mong đợi

đối với hậu thế, cấu hình định dạng chúng tôi sử dụng là:..

'color': { 
    '()': 'colorlog.ColoredFormatter', 
    'format': '%(log_color)s%(levelname)-8s %(message)s', 
    'log_colors': { 
     'DEBUG': 'bold_black', 
     'INFO':  'white', 
     'WARNING': 'yellow', 
     'ERROR': 'red', 
     'CRITICAL': 'bold_red', 
    }, 
} 
+0

Lưu ý rằng mô-đun [colorlog] (https://github.com/borntyping/python-colorlog) không hỗ trợ [256 màu] (https://github.com/borntyping/python-colorlog/issues/7). – Sardathrion

7

Django đã có hỗ trợ cho đầu ra màu thông qua biến môi trường 'DJANGO_COLORS' được sử dụng ví dụ khi chạy máy chủ phát triển tích hợp.Một số người đã nhận thấy điều này và tạo ra một giải pháp plug-and-play https://github.com/tiliv/django-colors-formatter; với gói phần mềm đó trên con đường python của dự án khai thác gỗ của tôi settings.py là như sau:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'formatters': { 
     'verbose': { 
      '()': 'djangocolors_formatter.DjangoColorsFormatter', # colored output 
      'format': '%(levelname)s %(name)s %(asctime)s %(module)s %(process)d %(thread)d %(pathname)[email protected]%(lineno)s: %(message)s' 
     }, 
     'simple': { 
      '()': 'djangocolors_formatter.DjangoColorsFormatter', # colored output 
      'format': '%(levelname)s %(name)s %(filename)[email protected]%(lineno)s: %(message)s' 
     }, 
    }, 
    # omitting the handler 'level' setting so that all messages are passed and we do level filtering in 'loggers' 
    'handlers': { 
     'null': { 
      'class':'django.utils.log.NullHandler', 
     }, 
     'console':{ 
      'class':'logging.StreamHandler', 
      'formatter': 'simple', 
     }, 
     'mail_admins': { 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler', 
      'formatter': 'verbose' 
     } 
    }, 
    'loggers': { 
     '': { 
      'handlers': ['mail_admins', 'console'], 
      'level': 'WARNING', 
     }, 
    } 
} 

mẫu console logging sản lượng sử dụng django-màu-formatter: Sample console logging output

+3

+1 để sử dụng sáng tạo của anh trai tôi! –

+0

Cài đặt qua 'pip install git + https: // github.com/tiliv/django-colors-formatter.git' – getup8

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