當我們正在編寫乙個比較龐大的專案,期間為了方便除錯,在**的很多地方都列印了大量的日誌。最後專案終於基本完成了,但是卻有乙個非常讓人頭疼的問題,那就是之前用於除錯的那些日誌,在專案正式上線之後仍然會照常列印,這樣不僅會降低程式的執行效率,還有可能將一些機密性的資料洩露出去,這時我們該怎麼辦呢?
要一行一行把所有列印日誌的**都刪掉嗎?很顯然這是不可能的,費時費力不說,萬一以後我們繼續維護這個專案的時候又需要這些日誌怎麼辦呢?一行一行再加回來嗎?那我們可就都得瘋了。
最理想的情況莫過於能夠自由地控制日誌的列印,當程式處於開發階段就讓日誌列印出來,當程式上線了之後就把日誌遮蔽掉,要怎麼做呢?
其實我們可以定製乙個工具類,比如新建乙個logger 類,**如下所示:
public
class
logger
}public
static
void
d(string tag, string msg)
}public
static
void
i(string tag, string msg)
}public
static
void
w(string tag, string msg)
}public
static
void
e(string tag, string msg)
}public
static
void
v(string msg)
}public
static
void
d(string msg)
}public
static
void
i(string msg)
}public
static
void
w(string msg)
}public
static
void
e(string msg)
}/**
* 獲取呼叫者的類名
*@return
*/public
static string getcallername()
}
正如我們看到的,我們在 logger 中先是定義了* verbose、 debug、 info、 warn、 error* 這五個整型常量,並且它們對應的值都是遞減的,然後又定義了乙個log_level常量,可以將它的值指定為上面五個常量中的任意乙個。
接下來我們提供了v()、d()、i()、w()、e()這五個自定義的日誌方法,在其內部分別呼叫了log.v()、log.d()、log.i()、log.w()、log.e()這五個方法來列印日誌,只不過在這些自定義的方法中我們都加入了乙個 if 判斷,只有當level常量的值大於對應日誌級別值的時候,才會將日誌列印出來。
這樣就把乙個自定義的日誌工具建立好了,之後在專案裡我們可以像使用普通的日誌工具一樣使用 logger,比如列印一行 debug 級別的日誌就可以這樣寫:logger.d(「tag」, 「debug log」);列印一行 warn 級別的日誌就可以這樣寫:logger.w(「tag」, 「warn log」);然後我們只需要修改log_level常量的值,就可以自由地控制日誌的列印行為了。
使用了這種方法之後,剛才所說的那個問題就不復存在了,我們只需要在開發階段將log_level指定成大於verbose的值,當專案正式上線的時候將log_level指定成0就可以了。
甚至我們採用重寫的方法還可以直接列印出呼叫者的名字,而無需每次都寫入tag引數,就是說我們呢每次只要輸入我們想要列印的資訊就可以了,省時省力何樂不為。
讓釋放excel程序的小tips
最近用excel.dll匯出excel那個小程式收到大家認可,感覺使用很方便,大家都反覆使用,單位時間產生大量的excel檔案,不知道為什麼使用頻率增多後,總有excel的程序停不掉,導致生成100份excel報表總有1 2份沒有儲存。任務管理器一抹多excle的程序。網上找的 諸如 system....
遊戲開發tips之RTTI(1)
首先說明標題的含義,怎麼感覺就和定義一種語言一樣,需要有乙個規約呢。標題定義如下 遊戲開發tip之 內容 總tips的第幾篇 擴充套件如下 內容 一,二,三.新手可憐,大神每一句話也許都藏著乾貨,但是新手總是不能立馬明白 立馬理解和明白的話,估計就上公升為和大神一樣的級別了吧 廢話少說,開始正文。大...
遊戲開發tips之RTTI(1)
首先說明標題的含義,怎麼感覺就和定義一種語言一樣,需要有乙個規約呢。標題定義如下 遊戲開發tip之 內容 總tips的第幾篇 擴充套件如下 內容 一,二,三.新手可憐,大神每一句話也許都藏著乾貨,但是新手總是不能立馬明白 立馬理解和明白的話,估計就上公升為和大神一樣的級別了吧 廢話少說,開始正文。大...