個人理解的易語言下的日志總結(備忘)


基本上 易語言的常見的調試信息 ,以最常見的易語言多線程腳本為例

1.易語言下的 調試輸出()函數

優點

(1)這個日志信息是最常用的 也是易語言內置的 不需要擔心日志沖突速度也蠻快

缺點:

(1)因為易語言的反饋輸出界面有顯示上限 比如能顯示100行 超出了100行就會自動抹去之前的內容 整個頁面從新開始記錄 這樣我們稍微大一點的日志就無法查看完整 非常的忌諱這個情況

(2)這個方法無法把日志寫到文件里面保存 對於查看日志更是問題大大的

(3)一旦易語言腳本編譯完成 調試輸出就是無效了

2.自己構建的綜合日志文件 多線程和主線程的日志信息都悉數寫入這個綜合日志文件

.版本 2

    ' 3 日志輸出到綜合日志文件
    .如果真 (開啟綜合日志)
        日志文件名 = 時間到文本 (當前時間, #日期部分) + “.txt”
        日志文件路徑 = 日志目錄路徑 + “\” + 日志文件名
        線程_進入許可區 (許可證_綜合日志文件操作)
        .如果真 (zjl取反 (文件是否存在 (日志文件路徑)))
            寫到文件 (日志文件路徑, 到字節集 (“”))
        .如果真結束
        文件號 = 打開文件 (日志文件路徑, #讀寫, )
        移到文件尾 (文件號)
        寫文本行 (文件號, 要寫入的日志內容)
        關閉文件 (文件號)
        線程_退出許可區 (許可證_綜合日志文件操作)

這個掐頭去尾的代碼就是自己寫的把所有線程的日志都寫入到一個以當前日期命名的txt文件里面

優點:所有的日志都可以以文件的形式保存 並且每天的日志 都對應以當天日期命名的txt文件查找方便

缺點:

(1)因為使用了許可證 效率堪憂

(2)所有的線程都把日志寫入一個文件 看起來非常雜亂 雖然我在日志里面增加了線程對應的線程序號來標識 但是查閱起來依然不太方便 當然 寫一個把日志進行自動過濾歸類的小函數也不難  不過這個方法可以作為一個備用手段

image


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

image

image


注:雙擊之后 我發現 實際上出現了 等待窗口 但是會自動跳轉到右下的任務區 自己看看那里的任務圖標 能找到等待窗口

image

缺點

(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取反 (文件是否存在 (日志文件路徑)))
            寫到文件 (日志文件路徑, 到字節集 (“”))
        .如果真結束
        文件號 = 打開文件 (日志文件路徑, #讀寫, )
        移到文件尾 (文件號)
        寫文本行 (文件號, 要寫入的日志內容)
        關閉文件 (文件號)
    .如果真結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM