一知半解用ruby開發 log的變化

2021-08-29 17:21:34 字數 2517 閱讀 6426

[url]前面一篇寫的帶流水了,這次專選乙個主題。

ror有debug功能,但是從未用過。但是開發過程中,總要看下執行環節中某些函式的呼叫是否正確,怎麼辦呢。

最開始的哪會,也就是剛剛學習ror哪會,輸出執行中間過程都是老實的用logger.info,logger.debug這些的。不過用了段時間,總覺得用的不爽。這幾個函式用於輸出文字還行,要直接看資料庫的查詢結果,hash的值這些都不方便。於是開始用p函式。

專案中類似

p test

p user.find(1)

p my_hash

開始逐漸增多。慢慢越來越多,p的輸出結果和順序都是看**的執行順序的,到了一定程度,一執行**螢幕上出現好幾十甚至好幾百的p函式輸出結果。 最終,我需要的輸出結果被淹沒在p的海洋中,怎麼也找不到了。

怎麼辦,加分割吧。然後**就變成這樣了

p "............................"

p user.find(1)

p "............................"

嗯,這下子好找很多了。好吧,我知道這個只是五十步笑百步。於是又有了下面的寫法

p "class user line 100"

p user.find(1)

p "out info #"

嘿嘿,治標不治本的寫法,不過出現這樣的情況,也是專案逐漸變大過程中的一部分,在一定規模下面,上面的這些都行。至於多少規模,各自感覺吧。

然後呢,開始有了質的變化,因為輸出太多,有些時候需要輸出,有的時候不需要,這樣就需要控制p的執行。於是有乙個函式寫成了這樣的

def do_some_action(id=nil,info="",debug=false)

p info if debug

end

現在查下整個專案**,也就只有乙個函式寫成這樣的,通過輸入引數來控制p的輸出。為啥只有乙個,我現在也有點想不起來了。 不過至少比起上面的寫法,進步了不少了吧。

過了段時間之後,又改進了寫法。

def debug(d=true)

@debug = d

enddef log(str)

actioncontroller::base.logger.debug str if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)

p str if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)

end

通過debug函式來控制是否需要輸出全部的log,然後在通過log函式來同時輸出到log檔案和console

這個寫法最終也沒有完全推廣開,就是乙個主檔案中用了下。

到目前為止,專案中有3種不同的執行log輸出方式了。最終這些都完全被淘汰了,上面的這些辦法過渡階段用用還行,多了實在頭痛。

最終需要知道某些變數的值之外,還要知道在那個檔案的哪一行等一些輔助資訊,這樣才能快速定位,修改。

通過je上各位的提示,最終版本的log輸出函式寫成了這樣的

def debug_print(str)

#return

call = caller[0].split("/")

tmp = call[call.size-1]

log = tmp + "::" + str.to_s

actioncontroller::base.logger.debug log if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)

p log if actioncontroller::base.logger && (actioncontroller::base.logger.debug? || @debug)

end

通過這個,可以輸出類似這樣的資訊

[quote]

[/quote]

當然上面的這個函式還是有缺陷的,還是有改進的餘地的。這個不說。

自從把**中的前三種log輸出方法通通換成 debug_print之後,這樣舒服多了,需要的資訊一目了然。出錯位置也很清晰了。

不過還是有不太滿意的,隨著**執行過程中千百次的呼叫debug_print,整體執行速度下降了好多。 某個頁面帶debug_print執行,5秒,不執行debug_print 1秒不到。相差甚大。還好真正上線的時候,可以隨時調整debug_print的內容,這樣就沒事了。

log的事情基本上是完了,下次考慮寫下專案中配置檔案的變化,如何從yaml到dsl的。

一知半解用ruby開發

從第一次接觸ruby rails到現在有段時間了,本著一貫快學快用習慣,看了一遍書之後就開始用ror做了些小專案,邊做邊查,邊學邊忘,到現在還是沒有記住幾個ror的特徵關鍵字,比如什麼約定阿,約束什麼的,也分不清為啥有symbol這麼奇怪的物件。更加不清楚yield到底怎麼起作用的。不過這些並不妨礙...

Razor 一知半解

在園子裡看到一些關於mvc的文章 一園友提起了razor,對此頗感興趣,原文是這樣說的 如果想詳細了解razor 請看scottgu 的部落格,於是在baidu 在google 中 搜尋 scottgu 的部落格 搜尋到的全是 了解 razor 請看scottgu 的部落格 這句話.於是感覺網路時代...

一知半解之 RequestMapping

value 指定請求的實際位址,指定的位址可以是uri template 模式 後面將會說明 method 指定請求的method型別,get post put delete等 produces 指定返回的內容型別,僅當request請求頭中的 accept 型別中包含該指定型別才返回 params...