// // MBIMLogging.m // kordophoned // // Created by James Magahern on 1/22/19. // Copyright © 2019 James Magahern. All rights reserved. // #import "MBIMLogging.h" #import #define ESC(inner) "\033[" inner "m" #define CLR ESC("0") #define BLD "1;" #define RED "31;" static os_log_t MBIMOSLog(void) { static dispatch_once_t onceToken; static os_log_t customLog = NULL; dispatch_once(&onceToken, ^{ customLog = os_log_create("net.buzzert.kordophoned", "General"); }); return customLog; } extern void __MBIMLogCommon(MBIMLogLevel level, NSString *format, ...) { va_list args; va_start(args, format); NSString *message = [[NSString alloc] initWithFormat:format arguments:args]; va_end(args); if (getenv("NSRunningFromLaunchd") != NULL) { // Running with launchd, use oslog. os_log_t mbimlog = MBIMOSLog(); switch (level) { case ML_INFO: os_log_debug(mbimlog, "%{public}@", message); break; case ML_NOTIFY: os_log_info(mbimlog, "%{public}@", message); break; case ML_FATAL: case ML_ERROR: os_log_error(mbimlog, "%{public}@", message); break; } } else { // Otherwise, write to stdout. static dispatch_once_t onceToken; static NSDateFormatter *dateFormatter = nil; dispatch_once(&onceToken, ^{ dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"Y-MM-d HH:mm:ss"; }); const char *c_fmt = "%s"; if (level == ML_NOTIFY) { // BOLD c_fmt = ESC(BLD) "%s"; } else if (level == ML_ERROR) { c_fmt = ESC(RED) "%s"; } else if (level == ML_FATAL) { c_fmt = ESC(BLD RED) "%s"; } NSString *dateStr = [dateFormatter stringFromDate:[NSDate date]]; fprintf(stdout, "%s: ", [dateStr UTF8String]); fprintf(stdout, c_fmt, [message UTF8String]); fprintf(stdout, CLR "\n"); } }