Add log module
Dieser Commit ist enthalten in:
		
							Ursprung
							
								
									d72aebcd09
								
							
						
					
					
						Commit
						c85c6cc819
					
				|  | @ -0,0 +1,103 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  *                Copyright (c) 2017-2019 by Löwenware Ltd | ||||
|  *             Please, refer LICENSE file for legal information | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| /**
 | ||||
|  * @file log.c | ||||
|  * @author Ilja Kartašov <ik@lowenware.com> | ||||
|  * @brief cStuff log module source file | ||||
|  * | ||||
|  * @see https://lowenware.com/
 | ||||
|  */ | ||||
| #include <time.h> | ||||
| #include "log.h" | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| cstuff_log_init(CStuffLog self, uint8_t level) | ||||
| { | ||||
| 	self->target = stderr; | ||||
| 	self->level = level; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| cstuff_log_release(CStuffLog self) | ||||
| { | ||||
| 	if (self->target != stderr) | ||||
| 		fclose(self->target); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| CStuffRetcode | ||||
| cstuff_log_set_file(CStuffLog self, const char *filename) | ||||
| { | ||||
| 	FILE *fp; | ||||
| 
 | ||||
| 	if (!(fp = fopen(filename, "a"))) | ||||
| 		return CSTUFF_SYSCALL_ERROR; | ||||
| 
 | ||||
| 	self->target = fp; | ||||
| 	return CSTUFF_SUCCESS; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int | ||||
| cstuff_log_printf(CStuffLog self, int level, const char *format, ...) | ||||
| { | ||||
| 	int result; | ||||
| 	va_list vl; | ||||
| 
 | ||||
| 	va_start(vl, format); | ||||
| 	result = cstuff_log_vprintf(self, level, format, vl); | ||||
| 	va_end(vl); | ||||
| 
 | ||||
| 	return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int | ||||
| cstuff_log_vprintf(CStuffLog self, int level, const char *format, va_list vl) | ||||
| { | ||||
| 	int result; | ||||
| 
 | ||||
| 	if (self->level & level) { | ||||
| 		FILE *f = self->target; | ||||
| 		char *label; | ||||
| 		time_t rawtime; | ||||
| 		char strtime[32+1]; | ||||
| 		struct tm timeinfo; | ||||
| 
 | ||||
| 		time(&rawtime); | ||||
| 		localtime_r(&rawtime, &timeinfo); | ||||
| 		strftime(strtime, 32, "%F %T", &timeinfo); | ||||
| 
 | ||||
| 		switch (level) | ||||
| 		{ | ||||
| 		case CSTUFF_LOG_ERROR: | ||||
| 			label = "!!"; | ||||
| 			break; | ||||
| 		case CSTUFF_LOG_ALERT: | ||||
| 			label = "~!"; | ||||
| 			break; | ||||
| 		case CSTUFF_LOG_DEBUG: | ||||
| 			label = "**"; | ||||
| 			break; | ||||
| 		default: | ||||
| 			label = "--"; | ||||
| 		} | ||||
| 
 | ||||
| 		result = fprintf(f, "%s %s ", strtime, label); | ||||
| 		result += vfprintf(f, format, vl); | ||||
| 		fputc('\n', f); | ||||
| 		result++; | ||||
| 		fflush(f); | ||||
| 	} else { | ||||
| 		result = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return result; | ||||
| } | ||||
|  | @ -0,0 +1,58 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  *                Copyright (c) 2017-2019 by Löwenware Ltd | ||||
|  *             Please, refer LICENSE file for legal information | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| /**
 | ||||
|  * @file log.h | ||||
|  * @author Ilja Kartašov <ik@lowenware.com> | ||||
|  * @brief cStuff log module header file | ||||
|  * | ||||
|  * @see https://lowenware.com/cStuff/
 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef CSTUFF_LOG_H_557ADEFE_2BE8_4B9B_A894_F08FF64008EF | ||||
| #define CSTUFF_LOG_H_557ADEFE_2BE8_4B9B_A894_F08FF64008EF | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <stdarg.h> | ||||
| #include <stdint.h> | ||||
| #include "retcode.h" | ||||
| 
 | ||||
| #define CSTUFF_LOG_OFF      (0) | ||||
| #define CSTUFF_LOG_ERROR    (1<<0) | ||||
| #define CSTUFF_LOG_ALERT    (1<<1) | ||||
| #define CSTUFF_LOG_STATE    (1<<2) | ||||
| #define CSTUFF_LOG_DEBUG    (1<<3) | ||||
| #define CSTUFF_LOG_ALL      (0xFF) | ||||
| 
 | ||||
| struct cstuff_log { | ||||
| 	FILE     *target; | ||||
| 	uint8_t   level; | ||||
| }; | ||||
| 
 | ||||
| typedef struct cstuff_log * CStuffLog; | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| cstuff_log_init(CStuffLog self, int level); | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| cstuff_log_release(CStuffLog self); | ||||
| 
 | ||||
| 
 | ||||
| CStuffRetcode | ||||
| cstuff_log_set_file(CStuffLog self, const char *filename); | ||||
| 
 | ||||
| 
 | ||||
| int | ||||
| cstuff_log_printf(CStuffLog self, int level, const char *format, ...); | ||||
| 
 | ||||
| 
 | ||||
| int | ||||
| cstuff_log_vprintf(CStuffLog self, int level, const char *format, va_list vl); | ||||
| 
 | ||||
| #endif /* !CSTUFF_LOG_H */ | ||||
		Laden…
	
		In neuem Issue referenzieren