我寫了這個接口:這個方案有錯誤記錄有什麼問題嗎?
//The idea is to use EHPrint to construct the error msg and then raise an error or
//a warning, etc. This removes the need to implement all 3 'Raise' functions
//as taking variable param list reducing code.
class ErrorHandler
{
public:
virtual void RaiseError(bool, int) = 0;
virtual void RaiseWarning(int) = 0;
virtual void RaiseMsg() = 0;
__attribute__((format(printf, 1, 2)))
virtual const char* EHPrint(const char*, ...) = 0;
virtual ~ErrorHandler(){}
};
忘記多線程問題,因爲一個對象將只在一個線程中使用。實現類可以記錄日誌,向用戶提出錯誤或根據需要終止。缺點是你必須先打電話給EHPrint
,然後才能提出錯誤等等。我可以通過任何方式使這更美麗?
編輯: 當我想要RaiseError
時,我真的想調用一個函數。截至目前,我必須致電EHPrintf
,然後致電RaiseError
。
EDIT2: 我認爲這是我的錯誤,我把錯誤處理和錯誤記錄結合在一起。將嘗試和分開他們,看看。
EDIT3: 我想我現在應該發佈記錄:
class Logger
{
public:
enum LogType
{
LT_DEBUG = 0,
LT_WARNING,
LT_ERROR,
LT_STAT,
LT_TEXT
};
__attribute__((format(printf, 5, 6)))
virtual const char* EHLog(LogType,
int,
const char*,
int,
const char*,
...) = 0;
virtual ~Logger(){}
};
因爲日誌現在是分開從而清除了代碼。
查看現有的開源日誌庫(log4cxx,Pantheios)以瞭解一個想法嗎? – DumbCoder 2010-10-15 09:16:42
我想回答這個特定的問題。那些庫是巨大的,我不想通過他們的atm。 :) – nakiya 2010-10-15 10:06:12
不需要通過代碼。至少瀏覽頭文件以獲得各種想法! – DumbCoder 2010-10-15 10:16:46