zoukankan      html  css  js  c++  java
  • printf打印的字符串显示不同颜色-测试代码

    printf打印的字符串显示不同颜色:https://www.cnblogs.com/jikexianfeng/p/13807231.html

    ubuntu@ubuntu:~/code/log$ tree
    .
    ├── main
    ├── main.c
    ├── user_lcd_log.c
    └── user_lcd_log.h
    
    0 directories, 4 files

    main.c

    // ----------------------------------------------------------------------------------
    # include <stdio.h>
    # include "user_lcd_log.h"
    // ----------------------------------------------------------------------------------
    void main(void){
        set_Status_record_value(lcd_code_log_options_tatus_all | lcd_code_log_options_all);
        // 输出
        log_Debug_Message_output_data((par_type)"abc111",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_Debug|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc222",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_conventional|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc333",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_Warning|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc444",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_Error|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc555",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_Debug|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc666",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_conventional|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc777",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_Warning|lcd_code_log_options_terminal));
        log_Debug_Message_output_data((par_type)"abc888",(par_type)"jikexianfeng",(lcd_code_log_options_tatus_Error|lcd_code_log_options_terminal));
    }

    user_lcd_log.h

    #ifndef __USER_LCD_LOG__H__
    #define __USER_LCD_LOG__H__
    // ----------------------------------------------------------------------------------
    // 01是高亮度,不写是低亮度。
    // 40是背景色,40:黑,41:红:42:绿,43:黄,44:青,45:蓝,47:白。
    // 32m是前景色:30:黑,31:红,32:绿,33:黄,34:蓝,35:紫,36:青,37:白。
    // ----------------------------------------------------------------------------------
    // printf
    # define system_printf                          "printf ""  // printf
    // head
    # define properties_head                        "\033["    // 数据头
    // 添加分号
    # define Control_code_add_semicolon             ";"         // 拼接
    // 添加尾
    # define Control_code_con_end                   "m"         // 拼接
    //
    # define Control_code_terminal_end              "
    ""            // 尾部
    # define Control_code_file_end                  "
    >>output.txt"  // 尾部
    // Control code
    # define Control_code_Close_all_properties      0       // 清空all属性
    # define Control_code_brightness_High           1       // 设置高亮度
    # define Control_code_Italic                    3       // 设置斜体
    # define Control_code_Underscore                4       // 设置下划线
    # define Control_code_Flashing                  5       // 设置闪烁
    # define Control_code_Reverse                   7       // 设置返现
    # define Control_code_Blanking                  8       // 设置消隐
    # define Control_code_Strikethrough_text        9       // 设置文本删除线
    # define Control_code_Double_underscore         21      // 设置双下划线
    // 字体颜色设置
    # define Control_code_Font_color_black          30      // 设置字体颜色黑色
    # define Control_code_Font_color_red            31      // 设置字体颜色红色
    # define Control_code_Font_color_green          32      // 设置字体颜色绿色
    # define Control_code_Font_color_yellow         33      // 设置字体颜色黄色
    # define Control_code_Font_color_blue           34      // 设置字体颜色蓝色
    # define Control_code_Font_color_purple         35      // 设置字体颜色紫色
    # define Control_code_Font_color_Dark_green     36      // 设置字体颜色深绿
    # define Control_code_Font_color_gray           37      // 设置字体颜色灰白
    // 背景颜色设置
    # define Control_code_background_color_black        40      // 设置背景颜色黑色
    # define Control_code_background_color_red          41      // 设置背景颜色红色
    # define Control_code_background_color_green        42      // 设置背景颜色绿色
    # define Control_code_background_color_yellow       43      // 设置背景颜色黄色
    # define Control_code_background_color_blue         44      // 设置背景颜色蓝色
    # define Control_code_background_color_purple       45      // 设置背景颜色紫色
    # define Control_code_background_color_Dark_green   46      // 设置背景颜色深绿
    # define Control_code_background_color_gray         47      // 设置背景颜色灰白
    // ----------------------------------------------------------------------------------
    # define par_type       long
    // ----------------------------------------------------------------------------------
    // 日报位置状态
    # define lcd_code_log_options_tatus_Debug           0x0001  // 调试数据打印(绿色)
    # define lcd_code_log_options_tatus_conventional    0X0002  // 日常数据打印(黑色)
    # define lcd_code_log_options_tatus_Warning         0x0004  // 警告数据打印(黄色)
    # define lcd_code_log_options_tatus_Error           0x0008  // 报错数据打印(红色)
    # define lcd_code_log_options_tatus_all             (lcd_code_log_options_tatus_Debug | lcd_code_log_options_tatus_conventional | lcd_code_log_options_tatus_Warning | lcd_code_log_options_tatus_Error)
    // 输出位置状态
    # define lcd_code_log_options_terminal              0X0010  // 输出到终端
    # define lcd_code_log_options_file                  0x0020  // 输出到文件
    # define lcd_code_log_options_all                   (lcd_code_log_options_terminal | lcd_code_log_options_file)
    // 所有标签
    # define lcd_code_log_all       (lcd_code_log_options_tatus_all | lcd_code_log_options_all)
    // ----------------------------------------------------------------------------------
    void set_Status_record_value(unsigned int Status_value);    // 配置
    void log_Debug_Message_output(par_type file_addr,par_type func_addr,par_type line,par_type label_addr,par_type sbuf_addr,unsigned int mode);
    // ----------------------------------------------------------------------------------
    // printf("%s => %s => %d
    ",__FILE__,__func__,__LINE__);   // 文件 函数 行数
     # define log_Debug_Message_output_data(label_addr,sbuf_addr,mode)
    log_Debug_Message_output((par_type)( __FILE__ ),(par_type)&(__func__),__LINE__,label_addr,sbuf_addr,mode)
    // ----------------------------------------------------------------------------------
    #endif

    user_lcd_log.c

    // ----------------------------------------------------------------------------------
    # include <stdio.h>
    # include <string.h>
    # include <time.h>
    # include <stdlib.h>
    # include "user_lcd_log.h"
    // ----------------------------------------------------------------------------------
    // 数据缓存
    struct Debug_Message_data{
        unsigned long logo_out_Sign;
        unsigned int  length;
        unsigned char logo_out_sbus[4096];
    };
    // ----------------------------------------------------------------------------------
    // 清除调试数据
    void Clean_Debug_Message_Module_data(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        Debug_Message->logo_out_Sign = 0;
        Debug_Message->length = 0;
        memset((void*)Debug_Message->logo_out_sbus,0,4096);
    }
    // printf
    void log_Debug_Message_Module_add_printf(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&(Debug_Message->logo_out_sbus[Debug_Message->length]),"%s",system_printf);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    
    // 添加数据头
    void log_Debug_Message_Module_add_head(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&(Debug_Message->logo_out_sbus[Debug_Message->length]),"%s",properties_head);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加参数
    void log_Debug_Message_Module_add_data(par_type Debug_data_addr,char parameter){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%d",parameter);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加分号
    void log_Debug_Message_Module_code_semicolon(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%s",Control_code_add_semicolon);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加尾部
    void log_Debug_Message_Module_code_end(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%s",Control_code_con_end);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加时间
    void log_Debug_Message_Module_add_Time(par_type Debug_data_addr,par_type file_addr,par_type func_addr,par_type line,par_type label_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        char * file  = (char *)file_addr;
        char * func  = (char *)func_addr;
        //unsigned int line = line_addr;
        char * label = (char *)label_addr;
        time_t t_time;
        struct tm *tm_time;
        // 时间转换
        t_time = time(NULL);
        tm_time = localtime(&t_time);
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%4d:%02d:%02d-%02d:%02d:%02d | %s >> %s >> %04d >> %s();  ",1900+tm_time->tm_year,tm_time->tm_mon,tm_time->tm_mday,tm_time->tm_hour,tm_time->tm_min,tm_time->tm_sec,file,func,line,label);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加字符串
    void log_Debug_Message_Module_add_string(par_type Debug_data_addr,unsigned char * data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%s",data_addr);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加尾部 output终端
    void log_Debug_Message_Module_terminal_end(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%s",Control_code_terminal_end);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // 添加尾部 output 文件output.txt
    void log_Debug_Message_Module_file_end(par_type Debug_data_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        sprintf((void *)&Debug_Message->logo_out_sbus[Debug_Message->length],"%s",Control_code_file_end);
        Debug_Message->length = strlen(Debug_Message->logo_out_sbus);
    }
    // ----------------------------------------------------------------------------------
    void printfss(par_type Debug_data_addr){
        int count = 0;
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data *)Debug_data_addr;
        for(count = 0; count < 4096;count++){
            printf("%c",Debug_Message->logo_out_sbus[count]);
        }
    }
    // ----------------------------------------------------------------------------------
    // "printf "33[1;31m2020:09:19-09:09:53 -- 刷新界面:jikexianfeng@outlook.com
    ""
    void log_Debug_Message_grade_output(par_type Debug_Message_addr,par_type file_addr,par_type func_addr,par_type line,par_type label_addr,par_type sbuf_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data* )Debug_Message_addr;
        char * sbuf = (char *)sbuf_addr;
        unsigned long Grade_Sign  = (Debug_Message->logo_out_Sign)&lcd_code_log_options_tatus_all;       // 日志等级
        unsigned long Output_Sign = (Debug_Message->logo_out_Sign)&lcd_code_log_options_all;       // 输出文件
        Clean_Debug_Message_Module_data(Debug_Message_addr);                                        // 清理数据
        log_Debug_Message_Module_add_printf(Debug_Message_addr);                                    // 添加指令printf
        //log_Debug_Message_Module_add_head(Debug_Message_addr);                                      // 添加数据头
        //log_Debug_Message_Module_add_data(Debug_Message_addr,Control_code_brightness_High);         // 添加参数(粗体)
        switch(Grade_Sign){                                     // 日志等级
            case lcd_code_log_options_tatus_Debug:{                 // 调试数据打印(绿色)
                log_Debug_Message_Module_code_semicolon(Debug_Message_addr);                            // 添加分号
                log_Debug_Message_Module_add_data(Debug_Message_addr,Control_code_Font_color_green);    // 添加参数
            }break;
            case lcd_code_log_options_tatus_conventional:{          // 日常数据打印(黑色)
                log_Debug_Message_Module_code_semicolon(Debug_Message_addr);                            // 添加分号
                log_Debug_Message_Module_add_data(Debug_Message_addr,Control_code_Font_color_black);    // 添加参数
            }break;
            case lcd_code_log_options_tatus_Warning:{               // 警告数据打印(黄色)
                log_Debug_Message_Module_code_semicolon(Debug_Message_addr);                            // 添加分号
                log_Debug_Message_Module_add_data(Debug_Message_addr,Control_code_Font_color_yellow);   // 添加参数
            }break;
            case lcd_code_log_options_tatus_Error:{                 // 报错数据打印(红色)
                log_Debug_Message_Module_code_semicolon(Debug_Message_addr);                            // 添加分号
                log_Debug_Message_Module_add_data(Debug_Message_addr,Control_code_Font_color_red);      // 添加参数
            }break;
            default:{;}break;
        }
        log_Debug_Message_Module_code_end(Debug_Message_addr);                                      // 添加尾部
        log_Debug_Message_Module_add_Time(Debug_Message_addr,file_addr,func_addr,line,label_addr);  // 添加时间
        log_Debug_Message_Module_add_string(Debug_Message_addr,sbuf);                               // 添加字符串
        switch(Output_Sign){                                // 文件存储位置
            case lcd_code_log_options_terminal:{log_Debug_Message_Module_terminal_end(Debug_Message_addr);}break;
            case lcd_code_log_options_file:{log_Debug_Message_Module_file_end(Debug_Message_addr);}break;
            default:{;}break;
        }
        system((const char *)(Debug_Message->logo_out_sbus));                                       // 输出日志
    }
    // ----------------------------------------------------------------------------------
    // 配置使能
    unsigned int Status_record_value;
    void set_Status_record_value(unsigned int Status_value){
        Status_record_value = Status_value;
    }
    // 使能
    void log_Debug_Message_output_EN(par_type Debug_Message_addr,par_type file_addr,par_type func_addr,par_type line,par_type label_addr,par_type sbuf_addr){
        struct Debug_Message_data* Debug_Message = (struct Debug_Message_data* )Debug_Message_addr;
        switch(Debug_Message->logo_out_Sign & lcd_code_log_options_tatus_all){                                     // 日志等级
            case lcd_code_log_options_tatus_Debug:{                 // 调试数据打印(绿色)
                if(Status_record_value&lcd_code_log_options_tatus_Debug){
                    log_Debug_Message_grade_output(Debug_Message_addr,file_addr,func_addr,line,label_addr,sbuf_addr);break;
                }
            }
            case lcd_code_log_options_tatus_conventional:{          // 日常数据打印(黑色)
                if(Status_record_value&lcd_code_log_options_tatus_conventional){
                    log_Debug_Message_grade_output(Debug_Message_addr,file_addr,func_addr,line,label_addr,sbuf_addr);break;
                }
            }
            case lcd_code_log_options_tatus_Warning:{               // 警告数据打印(黄色)
                if(Status_record_value&lcd_code_log_options_tatus_Warning){
                    log_Debug_Message_grade_output(Debug_Message_addr,file_addr,func_addr,line,label_addr,sbuf_addr);break;
                }
            }
            case lcd_code_log_options_tatus_Error:{                 // 报错数据打印(红色)
                if(Status_record_value&lcd_code_log_options_tatus_Error){
                    log_Debug_Message_grade_output(Debug_Message_addr,file_addr,func_addr,line,label_addr,sbuf_addr);break;
                }
            }
            default:{;}break;
        }
    }
    // ----------------------------------------------------------------------------------
    void log_Debug_Message_output(par_type file_addr,par_type func_addr,par_type line,par_type label_addr,par_type sbuf_addr,unsigned int mode){
        struct Debug_Message_data Debug_Message;
        unsigned int status_Sign = mode&lcd_code_log_all;
        Debug_Message.logo_out_Sign = mode;
        // 日志
        log_Debug_Message_output_EN((par_type)(&Debug_Message),file_addr,func_addr,line,label_addr,sbuf_addr);
    }
    // ----------------------------------------------------------------------------------

     结果:

  • 相关阅读:
    selenium 常见操作,使用 pywin32库 进行上传操作
    selenium 常见操作,使用 js 操作-日期框及文本框
    selenium 常见操作,js操作-将元素滚动到页面可见区域
    selenium 常见操作,使用 Keys 类来进行键盘的按键操作
    oracle性能诊断sql
    浏览器是如何处理页面元素的Download?
    websphere启动报:Could not resolve placeholder 'hibernate.hbm2ddl.auto' in string value "${hibernate.hbm2ddl.auto}"
    websphere部署不能发布war文件,提示“配置库中已存在应用程序
    websphere gc策略调整
    oracle表结构表数据导入导出
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/13830385.html
Copyright © 2011-2022 走看看