LCOV - code coverage report
Current view: top level - src - log.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 31 31 100.0 %
Date: 2020-09-22 18:03:19 Functions: 4 4 100.0 %

          Line data    Source code
       1             : // System Includes
       2             : #include <time.h>
       3             : 
       4             : // Internal Includes
       5             : #include "kirke/log.h"
       6             : 
       7             : static Log__Level KIRKE__LOG__LEVEL = Log__Level__Warning;
       8             : 
       9          16 : void log__set_log_level( Log__Level level ){
      10          16 :     if( level >= Log__Level__Verbose && level < Log__Level__COUNT ){
      11          15 :         KIRKE__LOG__LEVEL = level;
      12             :     }
      13          16 : }
      14             : 
      15           7 : Log__Level log__get_log_level(){
      16           7 :     return KIRKE__LOG__LEVEL;
      17             : }
      18             : 
      19          97 : char* log__level__to_string( Log__Level log_level ){
      20          97 :     switch( log_level ){
      21          14 :         case Log__Level__Verbose:
      22          14 :             return "Verbose";
      23          15 :         case Log__Level__Debug:
      24          15 :             return "Debug";
      25          17 :         case Log__Level__Info:
      26          17 :             return "Info";
      27          19 :         case Log__Level__Warning:
      28          19 :             return "Warning";
      29          21 :         case Log__Level__Error:
      30          21 :             return "Error";
      31          11 :         default:
      32          11 :             return "INVALID";
      33             :     }
      34             : }
      35             : 
      36             : static const char *log_level_colors[] = {
      37             :     "\x1b[36m", "\x1b[32m", "\x1b[33m", "\x1b[31m", "\x1b[35m"
      38             : };
      39             : 
      40          60 : void log__log( Log__Level level, const char* file, int line, const char* format, ... ){
      41          60 :     if( level < KIRKE__LOG__LEVEL || level >= Log__Level__COUNT ){
      42          29 :         return;
      43             :     }
      44             : 
      45          31 :     time_t now = time( NULL );
      46          31 :     struct tm *local_time = localtime( &now );
      47             : 
      48             :     char time_buffer[ 16 ];
      49          31 :     time_buffer[ strftime( time_buffer, sizeof( time_buffer ), "%H:%M:%S", local_time ) ] = '\0';
      50             : 
      51          31 :     fprintf(
      52             :         stderr,
      53             :         "[%s%7s]:\t\x1b[0m%s\t%s%-5s\x1b[0m %s:%d:\x1b[0m\t",
      54             :         log_level_colors[ level ],
      55             :         log__level__to_string( level ),
      56             :         time_buffer,
      57             :         log_level_colors[ level ],
      58             :         log_level_colors[ level ],
      59             :         file,
      60             :         line
      61             :     );
      62             : 
      63             :     va_list args;
      64          31 :     va_start( args, format );
      65          31 :     vfprintf( stderr, format, args );
      66          31 :     va_end( args );
      67             : 
      68          31 :     fprintf( stderr, "\n" );
      69             : }

Generated by: LCOV version 1.15