mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
	
	
		
			58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # clog: C-style (a-la printf) logging library
 | ||
|  | 
 | ||
|  | [](https://github.com/pytorch/cpuinfo/blob/master/deps/clog/LICENSE) | ||
|  | 
 | ||
|  | C-style library for logging errors, warnings, information notes, and debug information. | ||
|  | 
 | ||
|  | ## Features
 | ||
|  | 
 | ||
|  | - printf-style interface for formatting variadic parameters. | ||
|  | - Separate functions for logging errors, warnings, information notes, and debug information. | ||
|  | - Independent logging settings for different modules. | ||
|  | - Logging to logcat on Android and stderr/stdout on other platforms. | ||
|  | - Compatible with C99 and C++. | ||
|  | - Covered with unit tests. | ||
|  | 
 | ||
|  | ## Example
 | ||
|  | 
 | ||
|  | ```c | ||
|  | #include <clog.h>
 | ||
|  | 
 | ||
|  | #ifndef MYMODULE_LOG_LEVEL
 | ||
|  |     #define MYMODULE_LOG_LEVEL CLOG_DEBUG | ||
|  | #endif
 | ||
|  | 
 | ||
|  | CLOG_DEFINE_LOG_DEBUG(mymodule_, "My Module", MYMODULE_LOG_LEVEL); | ||
|  | CLOG_DEFINE_LOG_INFO(mymodule_, "My Module", MYMODULE_LOG_LEVEL); | ||
|  | CLOG_DEFINE_LOG_WARNING(mymodule_, "My Module", MYMODULE_LOG_LEVEL); | ||
|  | CLOG_DEFINE_LOG_ERROR(mymodule_, "My Module", MYMODULE_LOG_LEVEL); | ||
|  | 
 | ||
|  | ... | ||
|  | 
 | ||
|  | void some_function(...) { | ||
|  |     int status = ... | ||
|  |     if (status != 0) { | ||
|  |         mymodule_log_error( | ||
|  |             "something really bad happened: " | ||
|  |             "operation failed with status %d", status); | ||
|  |     } | ||
|  | 
 | ||
|  |     uint32_t expected_zero = ... | ||
|  |     if (expected_zero != 0) { | ||
|  |         mymodule_log_warning( | ||
|  |             "something suspicious happened (var = %"PRIu32"), " | ||
|  |             "fall back to generic implementation", expected_zero); | ||
|  |     } | ||
|  | 
 | ||
|  |     void* usually_non_null = ... | ||
|  |     if (usually_non_null == NULL) { | ||
|  |         mymodule_log_info( | ||
|  |             "something unusual, but common, happened: " | ||
|  |             "enabling work-around"); | ||
|  |     } | ||
|  | 
 | ||
|  |     float a = ... | ||
|  |     mymodule_log_debug("computed a = %.7f", a); | ||
|  | } | ||
|  | ``` |