個人理解的易語言下的日誌總結(備忘)
基本上 易語言的常見的調試信息 ,以最常見的易語言多線程腳本為例
1.易語言下的 調試輸出()函數
優點:
(1)這個日誌信息是最常用的 也是易語言內置的 不需要擔心日誌沖突速度也蠻快
缺點:
(1)因為易語言的反饋輸出界面有顯示上限 比如能顯示100行 超出了100行就會自動抹去之前的內容 整個頁面從新開始記錄 這樣我們稍微大一點的日誌就無法查看完整 非常的忌諱這個情況
(2)這個方法無法把日誌寫到文件裏面保存 對於查看日誌更是問題大大的
(3)一旦易語言腳本編譯完成 調試輸出就是無效了
2.自己構建的綜合日誌文件 多線程和主線程的日誌信息都悉數寫入這個綜合日誌文件
.版本 2 ‘ 3 日誌輸出到綜合日誌文件 .如果真 (開啟綜合日誌) 日誌文件名 = 時間到文本 (當前時間, #日期部分) + “.txt” 日誌文件路徑 = 日誌目錄路徑 + “\” + 日誌文件名 線程_進入許可區 (許可證_綜合日誌文件操作) .如果真 (zjl取反 (文件是否存在 (日誌文件路徑))) 寫到文件 (日誌文件路徑, 到字節集 (“”)) .如果真結束 文件號 = 打開文件 (日誌文件路徑, #讀寫, ) 移到文件尾 (文件號) 寫文本行 (文件號, 要寫入的日誌內容) 關閉文件 (文件號) 線程_退出許可區 (許可證_綜合日誌文件操作)
這個掐頭去尾的代碼就是自己寫的把所有線程的日誌都寫入到一個以當前日期命名的txt文件裏面
優點:所有的日誌都可以以文件的形式保存 並且每天的日誌 都對應以當天日期命名的txt文件查找方便
缺點:
(1)因為使用了許可證 效率堪憂
(2)所有的線程都把日誌寫入一個文件 看起來非常雜亂 雖然我在日誌裏面增加了線程對應的線程序號來標識 但是查閱起來依然不太方便 當然 寫一個把日誌進行自動過濾歸類的小函數也不難 不過這個方法可以作為一個備用手段
3.有的時候 所有線程和主線程的日誌都寫入一個日誌文件顯的雜亂不堪 就每個線程對應一個獨立的日誌文件 主線程也是對應1個獨立日誌文件
.版本 2 ‘ 4 日誌輸出到獨立的線程日誌文件 每個線程對應一個獨立的日誌文件 所以不用許可證了 .如果真 (開啟獨立線程日誌 = 真)‘ 如果開啟了線程獨立日誌 獨立線程日誌前綴 = “線程日誌_” + 時間到文本 (當前時間, #日期部分) + “_” ‘ 寫入日誌文件 日誌文件名 = 獨立線程日誌前綴 + 到文本 (大漠多線程數組標識) + “.txt” 日誌文件路徑 = 日誌目錄路徑 + “\” + 日誌文件名 .如果真 (zjl取反 (文件是否存在 (日誌文件路徑))) 寫到文件 (日誌文件路徑, 到字節集 (“”)) .如果真結束 文件號 = 打開文件 (日誌文件路徑, #讀寫, ) 移到文件尾 (文件號) 寫文本行 (文件號, 要寫入的日誌內容) 關閉文件 (文件號)
優點:一個線程對應1個日誌文件 就不會出現日誌沖突問題 所以就無需考慮許可證的使用 效率上可以
缺點:每個線程對應一個日誌文件 看起來的確比所有線程日誌都在一個日誌文件要清晰許多 不過畢竟是分了多個文件 不過瑕不掩瑜 還是不錯的
4 大漠老師推薦的以系統API(OutputDebugStringA) 輸出 以debugview接收的日誌(真是神的一逼)
.版本 2 .DLL命令 OutputDebugStringA, , "kernel32", "OutputDebugStringA", , 是windows下的api 負責輸出調試信息 .參數 lpOutputString, 文本型, , 0 .版本 2 .子程序 大漠日誌_初始化, , , 這是大漠推薦的日誌 使用系統api OutputDebugStringA實現 支持遠程獲取其他機器的實時日誌的功能 使用debugview查看實時日誌 非常強大 但是在調試模式下OutputDebugStringA實現發送的日誌會被易語言攔截導致debugview無法接收到 只能腳本編譯後才能正常工作是它的缺點 許可證_大漠日誌操作 = 線程_創建許可證 () .子程序 大漠日誌_輸出, , , 這是大漠推薦的日誌 使用系統api OutputDebugStringA實現 支持遠程獲取其他機器的實時日誌的功能 使用debugview查看實時日誌 非常強大 但是在調試模式下OutputDebugStringA實現發送的日誌會被易語言攔截導致debugview無法接收到 只能腳本編譯後才能正常工作是它的缺點 .參數 日誌內容, 文本型 線程_進入許可區 (許可證_大漠日誌操作) OutputDebugStringA (日誌內容) 線程_退出許可區 (許可證_大漠日誌操作)
優點:
(1)這個日誌支持遠程獲取其他機器上的實時日誌 就這一個功能就讓其他日誌汗顏 具體的如何實現
具體教程地址:https://blog.csdn.net/jiankunking/article/details/44984487
註:雙擊之後 我發現 實際上出現了 等待窗口 但是會自動跳轉到右下的任務區 自己看看那裏的任務圖標 能找到等待窗口
缺點:
(1)這個日誌 如果是在調試版的情況下(就是沒有編譯為exe的時候) 是無法在debugview裏面接收到日誌的 這個是最大的問題 調試腳本代碼的時候看不到日誌 要你何用
(2)這個日誌依然需要許可證來控制 避免日誌沖突
(3)debugview雖然支持過濾來查看指定線程的日誌 但是 一次只能過濾一個線程的 並且無法實時的對日誌進行分門歸類 還需要自己寫函數來歸類 比較麻煩
上述的日誌都各有自己的優缺點 考慮了一下 依照我目前對這些日誌的理解 我目前使用的日誌思路如下
0 界面增加3個勾選來控制是否把日誌輸出到界面的超級編輯框裏 是否把日誌輸出到綜合日誌文件裏 是否把日誌輸出到獨立的線程日誌文件裏面 不過一般默認是 把日誌輸出到超級編輯框 不輸出到綜合日誌文件裏 把日誌輸出到獨立的線程日誌文件
1.首先判斷下 當前是否為調試版
2 為調試版 使用調試輸出() 輸出日誌 然後 是否把日誌輸出到界面的超級編輯框裏 是否把日誌輸出到綜合日誌文件裏 是否把日誌輸出到獨立的線程日誌文件裏 還是由界面的3個勾選來控制即可
3 不是調試版 就是已經編譯為exe的 為了大漠日誌的遠程接收調試信息的功能 首先用大漠日誌輸出 然後 是否把日誌輸出到界面的超級編輯框裏 是否把日誌輸出到綜合日誌文件裏 是否把日誌輸出到獨立的線程日誌文件裏 還是由界面的3個勾選來控制即可
.版本 2 .支持庫 iext2 .支持庫 spec .子程序 寫入日誌, , , 這個函數包含多個功能1.調試輸出日誌內容 2.把日誌寫到界面的超級編輯框中 3日誌寫入一個指定的綜合日誌文件裏 4 日誌根據線程序號不同分門別類的寫到獨立的線程日誌文件裏面5 當前日誌是否寫入到界面的超級編輯框 .參數 大漠多線程數組標識, 整數型, , 對應的線程id 為0表示主線程 其他從1開始是正常線程 監控線程的日誌也寫到對應的線程日誌文件裏面不過內容多個[監] .參數 日誌內容, 文本型, , 日誌內容 .參數 警告等級, 整數型, 可空, 超級編輯框的文字顏色表示日誌嚴重等級 0 1 2 3 分別對應 黑色 藍色 橙色 紅色的警告等級 默認為0 .參數 開啟綜合日誌, 邏輯型, 可空, 是否把日誌統一寫入一個日誌文件 .參數 開啟獨立線程日誌, 邏輯型, 可空, 是否把日誌寫到對應的獨立的線程日誌文件裏面 .參數 關閉編輯框日誌記錄, 邏輯型, 可空, 為真就不向超級編輯框裏面寫入日誌了 默認為假自然是寫入的 .局部變量 當前時間, 日期時間型 .局部變量 日誌文件名, 文本型 .局部變量 文件號, 整數型 .局部變量 日誌文件路徑, 文本型 .局部變量 要寫入的日誌內容, 文本型 .局部變量 字體大小, 整數型 .局部變量 日誌內容格式, 字符格式 .局部變量 獨立線程日誌前綴, 文本型 ‘ 0 格式化要寫入的日誌內容 加上前綴等等 當前時間 = 取現行時間 () 要寫入的日誌內容 = zjl時間格式化 (當前時間) + “-” + “[” + 到文本 (大漠多線程數組標識) + “]” + 日誌內容 ‘ ====如果是調試模式 那麽就是正常的 先調試輸出 然後到超級編輯框上 再確定是否寫入綜合日誌文件 再確定是否寫入線程獨立日誌文件 .如果 (是否為調試版 ()) ‘ 1.調試輸出信心 調試輸出 (要寫入的日誌內容) ‘ 2 界面超級編輯框日誌輸出 .如果真 (關閉編輯框日誌記錄 = 假) .如果真 (是否為空 (警告等級)) 警告等級 = 0 .如果真結束 ‘ 字體大小 = 8 .判斷開始 (警告等級 = 0) 日誌內容格式.文本顏色 = #默認色 .判斷 (警告等級 = 1) 日誌內容格式.文本顏色 = #藍色 .判斷 (警告等級 = 2) 日誌內容格式.文本顏色 = #黃色 .判斷 (警告等級 = 3) 日誌內容格式.文本顏色 = #紅色 .默認 日誌內容格式.文本顏色 = #默認色 .判斷結束 日誌內容格式.字體大小 = 8 ‘ 字體固定為8把 也不用多費勁了 _啟動窗口.超級編輯框_日誌.置選擇區字符格式 (日誌內容格式) 線程_進入許可區 (許可證_超級編輯框_日誌) _啟動窗口.超級編輯框_日誌.被選擇文本 = 要寫入的日誌內容 + #換行符 線程_退出許可區 (許可證_超級編輯框_日誌) .如果真結束 ‘ 3 日誌輸出到綜合日誌文件 .如果真 (開啟綜合日誌) 日誌文件名 = 時間到文本 (當前時間, #日期部分) + “.txt” 日誌文件路徑 = 日誌目錄路徑 + “\” + 日誌文件名 線程_進入許可區 (許可證_綜合日誌文件操作) .如果真 (zjl取反 (文件是否存在 (日誌文件路徑))) 寫到文件 (日誌文件路徑, 到字節集 (“”)) .如果真結束 文件號 = 打開文件 (日誌文件路徑, #讀寫, ) 移到文件尾 (文件號) 寫文本行 (文件號, 要寫入的日誌內容) 關閉文件 (文件號) 線程_退出許可區 (許可證_綜合日誌文件操作) .如果真結束 ‘ 4 日誌輸出到獨立的線程日誌文件 每個線程對應一個獨立的日誌文件 所以不用許可證了 .如果真 (開啟獨立線程日誌 = 真) ‘ 如果開啟了線程獨立日誌 獨立線程日誌前綴 = “線程日誌_” + 時間到文本 (當前時間, #日期部分) + “_” ‘ 寫入日誌文件 日誌文件名 = 獨立線程日誌前綴 + 到文本 (大漠多線程數組標識) + “.txt” 日誌文件路徑 = 日誌目錄路徑 + “\” + 日誌文件名 .如果真 (zjl取反 (文件是否存在 (日誌文件路徑))) 寫到文件 (日誌文件路徑, 到字節集 (“”)) .如果真結束 文件號 = 打開文件 (日誌文件路徑, #讀寫, ) 移到文件尾 (文件號) 寫文本行 (文件號, 要寫入的日誌內容) 關閉文件 (文件號) .如果真結束 .否則 ‘ 1.調試輸出 這裏用的大漠日誌信息 大漠日誌_輸出 (要寫入的日誌內容) ‘ 2 界面超級編輯框日誌輸出 .如果真 (關閉編輯框日誌記錄 = 假) .如果真 (是否為空 (警告等級)) 警告等級 = 0 .如果真結束 ‘ 字體大小 = 8 .判斷開始 (警告等級 = 0) 日誌內容格式.文本顏色 = #默認色 .判斷 (警告等級 = 1) 日誌內容格式.文本顏色 = #藍色 .判斷 (警告等級 = 2) 日誌內容格式.文本顏色 = #黃色 .判斷 (警告等級 = 3) 日誌內容格式.文本顏色 = #紅色 .默認 日誌內容格式.文本顏色 = #默認色 .判斷結束 日誌內容格式.字體大小 = 8 ‘ 字體固定為8把 也不用多費勁了 _啟動窗口.超級編輯框_日誌.置選擇區字符格式 (日誌內容格式) 線程_進入許可區 (許可證_超級編輯框_日誌) _啟動窗口.超級編輯框_日誌.被選擇文本 = 要寫入的日誌內容 + #換行符 線程_退出許可區 (許可證_超級編輯框_日誌) .如果真結束 ‘ 3 日誌輸出到綜合日誌文件 .如果真 (開啟綜合日誌) 日誌文件名 = 時間到文本 (當前時間, #日期部分) + “.txt” 日誌文件路徑 = 日誌目錄路徑 + “\” + 日誌文件名 線程_進入許可區 (許可證_綜合日誌文件操作) .如果真 (zjl取反 (文件是否存在 (日誌文件路徑))) 寫到文件 (日誌文件路徑, 到字節集 (“”)) .如果真結束 文件號 = 打開文件 (日誌文件路徑, #讀寫, ) 移到文件尾 (文件號) 寫文本行 (文件號, 要寫入的日誌內容) 關閉文件 (文件號) 線程_退出許可區 (許可證_綜合日誌文件操作) .如果真結束 ‘ 4 日誌輸出到獨立的線程日誌文件 每個線程對應一個獨立的日誌文件 所以不用許可證了 .如果真 (開啟獨立線程日誌 = 真) ‘ 如果開啟了線程獨立日誌 獨立線程日誌前綴 = “線程日誌_” + 時間到文本 (當前時間, #日期部分) + “_” ‘ 寫入日誌文件 日誌文件名 = 獨立線程日誌前綴 + 到文本 (大漠多線程數組標識) + “.txt” 日誌文件路徑 = 日誌目錄路徑 + “\” + 日誌文件名 .如果真 (zjl取反 (文件是否存在 (日誌文件路徑))) 寫到文件 (日誌文件路徑, 到字節集 (“”)) .如果真結束 文件號 = 打開文件 (日誌文件路徑, #讀寫, ) 移到文件尾 (文件號) 寫文本行 (文件號, 要寫入的日誌內容) 關閉文件 (文件號) .如果真結束
個人理解的易語言下的日誌總結(備忘)