个人理解的易语言下的日志总结(备忘)

时间:2024-03-10 22:31:18

基本上 易语言的常见的调试信息 ,以最常见的易语言多线程脚本为例

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取反 (文件是否存在 (日志文件路径)))
            写到文件 (日志文件路径, 到字节集 (“”))
        .如果真结束
        文件号 = 打开文件 (日志文件路径, #读写, )
        移到文件尾 (文件号)
        写文本行 (文件号, 要写入的日志内容)
        关闭文件 (文件号)
    .如果真结束