2013-03-01 43 views
2

我想Django的配置日誌記錄,這樣我在日誌中的每一行有session_key可以(如果設置)。我想我找到了一個方法:被定義一樣,Django的一致自定義日誌格式

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'formatters': { 
     'request': { 
      'format': '%(asctime)s %(levelname)-8s [%(sessid)s] %(message)s', 
     }, 
    }, 
    'filters': { 
     'request': { 
      '()': 'yellowballs.yblogging.RequestFilter' 
     }, 
    }, 
    'handlers': { 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'filters': ['request'], 
      'formatter': 'request', 
     } 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['console'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
    }, 
} 

與過濾器:

class RequestFilter(logging.Filter): 
    def filter(self, record): 
     session_store = SessionStore() 
     record.sessid = session_store.session_key 
     return True 

它似乎運作良好,但Django的它記錄其信息的默認格式:

2013-03-01 08:44:41,359 WARNING [None] Not Found:/
[01/Mar/2013 08:44:41] "GET/HTTP/1.1" 200 1962 

如何獲得線[01/Mar/2013 08:44:41] "GET/HTTP/1.1" 200 1962在相同的格式記錄的其餘部分顯示?

有一個簡單而漂亮的方式來覆蓋所有的Django的默認格式,這樣的日誌消息將在整個項目是否一致?

回答

0

看來,這些線是通過我的應用程序沒有登錄,而是由manage.py runserver服務器。因此無法格式化它們,而是將應用程序日誌記錄到某些文件中。這將刪除全部應用程序日誌中的行,但沒關係,因爲他們不屬於那裏:)

0

我想你忘了使用格式化:

'handlers': { 
    'console': { 
     'level': 'DEBUG', 
     'class': 'logging.StreamHandler', 
     'filters': ['set_sessid'], 
     'formatter': 'request', // this 
    }, 
}, 
+0

呀,現在我已經改變了它,並糾正了問題,但它並沒有解決這個問題 - Django的日誌消息仍以不同的格式 – 2013-03-01 10:56:49

+0

嘗試將django記錄器的級別更改爲INFO或DEBUG。您看到的日誌條目通過主'django'記錄器,並且您設置的最小ERROR級別爲 – 2013-03-01 11:04:00

+0

ok,對其進行了更改,但它也無濟於事;仍然得到這些行: '[01/Mar/2013 02:41:33]「GET/HTTP/1.1」200 1962' – 2013-03-01 11:24:30