2012-07-17 79 views
1

從django/python移過來,我在使用rails logger記錄所有我想要的信息時遇到了一些麻煩。我想知道如何/如果以下可以實現:使用rails的日誌信息

  1. 有日誌格式(之三)有具體的文件,函數名和行其中記錄語句本身被發現。本質上相當於LOG_MSG_FORMAT = '%(asctime)s %(levelname)s %(filename)s:%(funcName)s(%(lineno)d) : %(message)s'在python logger中?
  2. 能夠記錄所有請求,通過類似於django request logging middleware。特別是,能夠記錄每個請求的用戶名(如果已登錄)。

我是否缺少明顯的東西?或者這是否需要(很多)自定義代碼?

回答

1

我剛發現這個railtie gem可能有幫助,但我想它會採取一些「自定義代碼」來附加用戶名到日誌。請參閱關於記錄特定控制器和型號的自述文件部分。

logging-rails railtie

+0

謝謝@lukewendling。我玩了它,它看起來不錯。它甚至顯示控制器/模型是好的,但我不知道如何顯示文件/功能/線。即使設置了「跟蹤」。任何想法如何使這項工作? – gingerlime 2012-07-20 18:27:18

+0

不知道,但我瞥了一眼,看看如何關閉Railtie框架的默認日誌記錄(默認情況下不記錄ActionController),並且覺得代碼寫得很好,而且很容易理解。也許你可以在適當的地方優雅地插入__FILE__和__LINE__並提交拉取請求。我認爲那將是一個很好的附加功能。 – 2012-07-21 17:42:16

+0

再次感謝,但我仍然是ruby/rails新手,所以不知道如何做到這一點。我已經創建了一個[問題](https://github.com/TwP/logging-rails/issues/8),希望有人能夠提供幫助。對於關於logging-rails的提示+1。 – gingerlime 2012-07-21 22:16:24

1

我不知道得到該文件,功能和行號,但它很容易從application_controller登錄:

class ApplicationController < ActionController::Base 
    before_filter :log_user 
    def log_user 
    if current_user 
     Rails.logger.info "Processing Request for #{current_user.name}" 
    end 
    end 
end 
+0

Thanks @Unixmonkey。我希望能夠以某種方式將它嵌入到2012年的「Started GET」/「for 1.2.3.4 ...」部分中。我認爲這是最合乎邏輯的地方。我太挑剔了嗎?問太多了嗎? – gingerlime 2012-07-20 18:28:01

+0

+1的建議。在我能更好地解決問題之前,我可能會使用這種方法。 – gingerlime 2012-07-21 22:17:44

1

只是爲了萬一這個快速新增記事是有用的人:

lograge gem使得軌道記錄太多類似Django的,再加上可以很整齊定製,adding parameters如遠程IP地址,CURRENT_USER等

它也減少了呈現的佈局的冗長度,我無論如何發現不需要生產。它也與@lukewendling提到的logging-rails railtie很好地搭配。

不幸的是,我仍然找不到像django那樣顯示文件/函數/行號的任何內容,但我想這太難了。

+0

也許這將有助於: http://stackoverflow.com/questions/12626735/adding-filename-to-rails-logger-info-messages – aqn 2014-01-14 17:14:15