Ticket #571: runtime-color.patch

File runtime-color.patch, 10.6 KB (added by Ondrej.Sterbak, 14 years ago)

Patch implementing described items.

  • pjsip/src/pjsua-lib/pjsua_core.c

     
    4040    char errmsg[PJ_ERR_MSG_SIZE]; 
    4141 
    4242    pj_strerror(status, errmsg, sizeof(errmsg)); 
    43     PJ_LOG(3,(sender, "%s: %s [status=%d]", title, errmsg, status)); 
     43    PJ_LOG(1,(sender, "%s: %s [status=%d]", title, errmsg, status)); 
    4444} 
    4545 
    4646 
     
    6969    cfg->level = 5; 
    7070    cfg->console_level = 4; 
    7171    cfg->decor = PJ_LOG_HAS_SENDER | PJ_LOG_HAS_TIME |  
    72                  PJ_LOG_HAS_MICRO_SEC | PJ_LOG_HAS_NEWLINE; 
     72                 PJ_LOG_HAS_MICRO_SEC | PJ_LOG_HAS_NEWLINE | 
     73                 PJ_LOG_HAS_SPACE | PJ_LOG_HAS_COLOR; 
    7374} 
    7475 
    7576PJ_DEF(void) pjsua_logging_config_dup(pj_pool_t *pool, 
  • pjlib/include/pj/log.h

     
    6868 */ 
    6969enum pj_log_decoration 
    7070{ 
    71     PJ_LOG_HAS_DAY_NAME   =   1, /**< Include day name [default: no].        */ 
    72     PJ_LOG_HAS_YEAR       =   2, /**< Include year digit [default: no]       */ 
    73     PJ_LOG_HAS_MONTH      =   4, /**< Include month [default: no]            */ 
    74     PJ_LOG_HAS_DAY_OF_MON =   8, /**< Include day of month [default: no]     */ 
    75     PJ_LOG_HAS_TIME       =  16, /**< Include time [default: yes].           */ 
    76     PJ_LOG_HAS_MICRO_SEC  =  32, /**< Include microseconds [yes]             */ 
    77     PJ_LOG_HAS_SENDER     =  64, /**< Include sender in the log [yes].       */ 
    78     PJ_LOG_HAS_NEWLINE    = 128, /**< Terminate each call with newline [yes].*/ 
    79     PJ_LOG_HAS_CR         = 256  /**< Include carriage return [no].          */ 
     71    PJ_LOG_HAS_DAY_NAME   =    1, /**< Include day name [default: no]         */ 
     72    PJ_LOG_HAS_YEAR       =    2, /**< Include year digit [no]                */ 
     73    PJ_LOG_HAS_MONTH      =    4, /**< Include month [no]                     */ 
     74    PJ_LOG_HAS_DAY_OF_MON =    8, /**< Include day of month [no]              */ 
     75    PJ_LOG_HAS_TIME       =   16, /**< Include time [yes]                     */ 
     76    PJ_LOG_HAS_MICRO_SEC  =   32, /**< Include microseconds [yes]             */ 
     77    PJ_LOG_HAS_SENDER     =   64, /**< Include sender in the log [yes]        */ 
     78    PJ_LOG_HAS_NEWLINE    =  128, /**< Terminate each call with newline [yes] */ 
     79    PJ_LOG_HAS_CR         =  256, /**< Include carriage return [no]           */ 
     80    PJ_LOG_HAS_SPACE      =  512, /**< Include two spaces before log [yes]    */ 
     81    PJ_LOG_HAS_COLOR      = 1024  /**< Colorize logs [yes]                    */ 
    8082}; 
    8183 
    8284/** 
     
    199201PJ_DECL(unsigned) pj_log_get_decor(void); 
    200202 
    201203 
     204/** 
     205 * Set color of log messages. 
     206 * 
     207 * @param level     Log level which color will be changed. 
     208 * @param color     Desired color. 
     209 */ 
     210PJ_DECL(void) pj_log_set_color(int level, pj_color_t color); 
     211 
     212/** 
     213 * Get color of log messages. 
     214 * 
     215 * @param level     Log level which color will be returned. 
     216 * @return          Log color. 
     217 */ 
     218PJ_DECL(pj_color_t) pj_log_get_color(int level); 
     219 
     220 
    202221#else   /* #if PJ_LOG_MAX_LEVEL >= 1 */ 
    203222 
    204223/** 
     
    236255#  define pj_log_set_decor(decor) 
    237256 
    238257/** 
     258 * Set color of log messages. 
     259 * 
     260 * @param level     Log level which color will be changed. 
     261 * @param color     Desired color. 
     262 */ 
     263#  define pj_log_set_color(level, color) 
     264 
     265/** 
    239266 * Get current maximum log verbositylevel. 
    240267 * 
    241268 * @return          Current log maximum level. 
     
    249276 */ 
    250277#  define pj_log_get_decor()    0 
    251278 
     279/** 
     280 * Get color of log messages. 
     281 * 
     282 * @param level     Log level which color will be returned. 
     283 * @return          Log color. 
     284 */ 
     285#  define pj_log_get_color(level) 0 
     286 
    252287 
    253288#endif  /* #if PJ_LOG_MAX_LEVEL >= 1 */ 
    254289 
  • pjlib/src/pj/log_writer_stdout.c

     
    2020#include <pj/os.h> 
    2121#include <pj/compat/stdfileio.h> 
    2222 
    23 #define CLR_FATAL    (PJ_TERM_COLOR_BRIGHT | PJ_TERM_COLOR_R) 
    24 #define CLR_WARNING  (PJ_TERM_COLOR_BRIGHT | PJ_TERM_COLOR_R | PJ_TERM_COLOR_G) 
    25 #define CLR_INFO     (PJ_TERM_COLOR_BRIGHT | PJ_TERM_COLOR_R | PJ_TERM_COLOR_G | \ 
    26                       PJ_TERM_COLOR_B) 
    27 #define CLR_DEFAULT  (PJ_TERM_COLOR_R | PJ_TERM_COLOR_G | PJ_TERM_COLOR_B) 
    2823 
    2924static void term_set_color(int level) 
    3025{ 
    3126#if defined(PJ_TERM_HAS_COLOR) && PJ_TERM_HAS_COLOR != 0 
    32     unsigned attr = 0; 
    33     switch (level) { 
    34     case 0: 
    35     case 1: attr = CLR_FATAL;  
    36         break; 
    37     case 2: attr = CLR_WARNING;  
    38         break; 
    39     case 3: attr = CLR_INFO;  
    40         break; 
    41     default: 
    42         attr = CLR_DEFAULT; 
    43         break; 
    44     } 
    45  
    46     pj_term_set_color(attr); 
     27    pj_term_set_color(pj_log_get_color(level)); 
    4728#endif 
    4829} 
    4930 
    5031static void term_restore_color(void) 
    5132{ 
    5233#if defined(PJ_TERM_HAS_COLOR) && PJ_TERM_HAS_COLOR != 0 
    53     pj_term_set_color(CLR_DEFAULT); 
     34    /* Set terminal to its default color */ 
     35    pj_term_set_color(pj_log_get_color(77)); 
    5436#endif 
    5537} 
    5638 
     
    6143    PJ_UNUSED_ARG(len); 
    6244 
    6345    /* Copy to terminal/file. */ 
    64     term_set_color(level); 
    65     printf("%s", buffer); 
    66     term_restore_color(); 
     46    if (pj_log_get_decor() & PJ_LOG_HAS_COLOR) { 
     47        term_set_color(level); 
     48        printf("%s", buffer); 
     49        term_restore_color(); 
     50    } else { 
     51        printf("%s", buffer); 
     52    } 
    6753} 
    6854 
  • pjlib/src/pj/os_core_unix.c

     
    16891689 */ 
    16901690PJ_DEF(pj_status_t) pj_term_set_color(pj_color_t color) 
    16911691{ 
    1692     PJ_UNUSED_ARG(color); 
    1693     return PJ_EINVALIDOP; 
     1692    /* put bright prefix to ansi_color */ 
     1693    char ansi_color[12] = "\033[01;3"; 
     1694 
     1695    if (color & PJ_TERM_COLOR_BRIGHT) { 
     1696        color ^= PJ_TERM_COLOR_BRIGHT; 
     1697    } else { 
     1698        strcpy(ansi_color, "\033[00;3"); 
     1699    } 
     1700 
     1701    switch (color) { 
     1702    case 0: 
     1703        /* black color */ 
     1704        strcat(ansi_color, "0m"); 
     1705        break; 
     1706    case PJ_TERM_COLOR_R: 
     1707        /* red color */ 
     1708        strcat(ansi_color, "1m"); 
     1709        break; 
     1710    case PJ_TERM_COLOR_G: 
     1711        /* green color */ 
     1712        strcat(ansi_color, "2m"); 
     1713        break; 
     1714    case PJ_TERM_COLOR_B: 
     1715        /* blue color */ 
     1716        strcat(ansi_color, "4m"); 
     1717        break; 
     1718    case PJ_TERM_COLOR_R | PJ_TERM_COLOR_G: 
     1719        /* yellow color */ 
     1720        strcat(ansi_color, "3m"); 
     1721        break; 
     1722    case PJ_TERM_COLOR_R | PJ_TERM_COLOR_B: 
     1723        /* magenta color */ 
     1724        strcat(ansi_color, "5m"); 
     1725        break; 
     1726    case PJ_TERM_COLOR_G | PJ_TERM_COLOR_B: 
     1727        /* cyan color */ 
     1728        strcat(ansi_color, "6m"); 
     1729        break; 
     1730    case PJ_TERM_COLOR_R | PJ_TERM_COLOR_G | PJ_TERM_COLOR_B: 
     1731        /* white color */ 
     1732        strcat(ansi_color, "7m"); 
     1733        break; 
     1734    default: 
     1735        /* default console color */ 
     1736        strcpy(ansi_color, "\033[00m"); 
     1737        break; 
     1738    } 
     1739 
     1740    fputs(ansi_color, stdout); 
     1741 
     1742    return PJ_SUCCESS; 
    16941743} 
    16951744 
    16961745/** 
  • pjlib/src/pj/log.c

     
    3131#endif 
    3232static pj_log_func *log_writer = &pj_log_write; 
    3333static unsigned log_decor = PJ_LOG_HAS_TIME | PJ_LOG_HAS_MICRO_SEC | 
    34                             PJ_LOG_HAS_SENDER | PJ_LOG_HAS_NEWLINE; 
     34                            PJ_LOG_HAS_SENDER | PJ_LOG_HAS_NEWLINE | 
     35                            PJ_LOG_HAS_SPACE | PJ_LOG_HAS_COLOR; 
     36 
     37static pj_color_t PJ_LOG_COLOR_0 = PJ_TERM_COLOR_BRIGHT | PJ_TERM_COLOR_R; 
     38static pj_color_t PJ_LOG_COLOR_1 = PJ_TERM_COLOR_BRIGHT | PJ_TERM_COLOR_R; 
     39static pj_color_t PJ_LOG_COLOR_2 = PJ_TERM_COLOR_BRIGHT |  
     40                                   PJ_TERM_COLOR_R |  
     41                                   PJ_TERM_COLOR_G; 
     42static pj_color_t PJ_LOG_COLOR_3 = PJ_TERM_COLOR_BRIGHT |  
     43                                   PJ_TERM_COLOR_R |  
     44                                   PJ_TERM_COLOR_G |  
     45                                   PJ_TERM_COLOR_B; 
     46static pj_color_t PJ_LOG_COLOR_4 = PJ_TERM_COLOR_R |  
     47                                   PJ_TERM_COLOR_G |  
     48                                   PJ_TERM_COLOR_B; 
     49static pj_color_t PJ_LOG_COLOR_5 = PJ_TERM_COLOR_R |  
     50                                   PJ_TERM_COLOR_G |  
     51                                   PJ_TERM_COLOR_B; 
     52static pj_color_t PJ_LOG_COLOR_6 = PJ_TERM_COLOR_R |  
     53                                   PJ_TERM_COLOR_G |  
     54                                   PJ_TERM_COLOR_B; 
     55/* Default terminal color */ 
     56static pj_color_t PJ_LOG_COLOR_77 = PJ_TERM_COLOR_R |  
     57                                    PJ_TERM_COLOR_G |  
     58                                    PJ_TERM_COLOR_B; 
    3559 
    3660#if PJ_LOG_USE_STACK_BUFFER==0 
    3761static char log_buffer[PJ_LOG_MAX_SIZE]; 
     
    4771    return log_decor; 
    4872} 
    4973 
     74PJ_DEF(void) pj_log_set_color(int level, pj_color_t color) 
     75{ 
     76    switch (level)  
     77    { 
     78        case 0: PJ_LOG_COLOR_0 = color;  
     79            break; 
     80        case 1: PJ_LOG_COLOR_1 = color;  
     81            break; 
     82        case 2: PJ_LOG_COLOR_2 = color;  
     83            break; 
     84        case 3: PJ_LOG_COLOR_3 = color;  
     85            break; 
     86        case 4: PJ_LOG_COLOR_4 = color;  
     87            break; 
     88        case 5: PJ_LOG_COLOR_5 = color;  
     89            break; 
     90        case 6: PJ_LOG_COLOR_6 = color;  
     91            break; 
     92        /* Default terminal color */ 
     93        case 77: PJ_LOG_COLOR_77 = color;  
     94            break; 
     95        default: 
     96            /* Do nothing */ 
     97            break; 
     98    } 
     99} 
     100 
     101PJ_DEF(pj_color_t) pj_log_get_color(int level) 
     102{ 
     103    switch (level) { 
     104        case 0: 
     105            return PJ_LOG_COLOR_0; 
     106        case 1: 
     107            return PJ_LOG_COLOR_1; 
     108        case 2: 
     109            return PJ_LOG_COLOR_2; 
     110        case 3: 
     111            return PJ_LOG_COLOR_3; 
     112        case 4: 
     113            return PJ_LOG_COLOR_4; 
     114        case 5: 
     115            return PJ_LOG_COLOR_5; 
     116        case 6: 
     117            return PJ_LOG_COLOR_6; 
     118        default: 
     119            /* Return default terminal color */ 
     120            return PJ_LOG_COLOR_77; 
     121    } 
     122} 
     123 
    50124PJ_DEF(void) pj_log_set_level(int level) 
    51125{ 
    52126    pj_log_max_level = level; 
     
    105179        pre += pj_utoa_pad(ptime.mon+1, pre, 2, '0'); 
    106180    } 
    107181    if (log_decor & PJ_LOG_HAS_DAY_OF_MON) { 
    108         *pre++ = ' '; 
     182        *pre++ = '-'; 
    109183        pre += pj_utoa_pad(ptime.day, pre, 2, '0'); 
    110184    } 
    111185    if (log_decor & PJ_LOG_HAS_TIME) { 
     
    139213    if (log_decor != 0 && log_decor != PJ_LOG_HAS_NEWLINE) 
    140214        *pre++ = ' '; 
    141215 
     216    if (log_decor & PJ_LOG_HAS_SPACE) { 
     217        *pre++ = ' '; 
     218        *pre++ = ' '; 
     219    } 
     220 
    142221    len = pre - log_buffer; 
    143222 
    144223    /* Print the whole message to the string log_buffer. */ 
  • pjsip-apps/src/pjsua/pjsua_app.c

     
    37103710 
    37113711                len = write_settings(&app_config, settings, sizeof(settings)); 
    37123712                if (len < 1) 
    3713                     PJ_LOG(3,(THIS_FILE, "Error: not enough buffer")); 
     3713                    PJ_LOG(1,(THIS_FILE, "Error: not enough buffer")); 
    37143714                else 
    37153715                    PJ_LOG(3,(THIS_FILE,  
    37163716                              "Dumping configuration (%d bytes):\n%s\n", 
     
    37393739 
    37403740                len = write_settings(&app_config, settings, sizeof(settings)); 
    37413741                if (len < 1) 
    3742                     PJ_LOG(3,(THIS_FILE, "Error: not enough buffer")); 
     3742                    PJ_LOG(1,(THIS_FILE, "Error: not enough buffer")); 
    37433743                else { 
    37443744                    pj_oshandle_t fd; 
    37453745                    pj_status_t status; 
     
    40374037#endif 
    40384038 
    40394039    if (transport_id == -1) { 
    4040         PJ_LOG(3,(THIS_FILE, "Error: no transport is configured")); 
     4040        PJ_LOG(1,(THIS_FILE, "Error: no transport is configured")); 
    40414041        status = -1; 
    40424042        goto on_error; 
    40434043    }