diff --git a/cli-app/cper-convert.c b/cli-app/cper-convert.c
index 33c7af7..bb06be9 100644
--- a/cli-app/cper-convert.c
+++ b/cli-app/cper-convert.c
@@ -10,6 +10,7 @@
 #include <libgen.h>
 #include <limits.h>
 #include <json.h>
+#include <libcper/log.h>
 #include <libcper/cper-parse.h>
 #include <libcper/json-schema.h>
 
@@ -19,6 +20,7 @@
 
 int main(int argc, char *argv[])
 {
+	cper_set_log_stdio();
 	//Print help if requested.
 	if (argc == 2 && strcmp(argv[1], "--help") == 0) {
 		print_help();
diff --git a/cper-parse.c b/cper-parse.c
index e7cde0d..2a68fab 100644
--- a/cper-parse.c
+++ b/cper-parse.c
@@ -12,6 +12,7 @@
 
 #include <libcper/base64.h>
 #include <libcper/Cper.h>
+#include <libcper/log.h>
 #include <libcper/cper-parse.h>
 #include <libcper/cper-parse-str.h>
 #include <libcper/cper-utils.h>
@@ -36,7 +37,8 @@
 	unsigned int remaining = size;
 
 	if (remaining < sizeof(EFI_COMMON_ERROR_RECORD_HEADER)) {
-		printf("Invalid CPER file: Invalid header (incorrect signature).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid header (incorrect signature).\n");
 		goto fail;
 	}
 
@@ -45,15 +47,18 @@
 	pos += sizeof(EFI_COMMON_ERROR_RECORD_HEADER);
 	remaining -= sizeof(EFI_COMMON_ERROR_RECORD_HEADER);
 	if (header->SignatureStart != EFI_ERROR_RECORD_SIGNATURE_START) {
-		printf("Invalid CPER file: Invalid header (incorrect signature).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid header (incorrect signature).\n");
 		goto fail;
 	}
 	if (header->SectionCount == 0) {
-		printf("Invalid CPER file: Invalid section count (0).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid section count (0).\n");
 		goto fail;
 	}
 	if (remaining < sizeof(EFI_ERROR_SECTION_DESCRIPTOR)) {
-		printf("Invalid CPER file: Invalid section descriptor (section offset + length > size).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid section descriptor (section offset + length > size).\n");
 		goto fail;
 	}
 
@@ -69,8 +74,9 @@
 	for (int i = 0; i < header->SectionCount; i++) {
 		//Create the section descriptor.
 		if (remaining < sizeof(EFI_ERROR_SECTION_DESCRIPTOR)) {
-			printf("Invalid number of section headers: Header states %d sections, could not read section %d.\n",
-			       header->SectionCount, i + 1);
+			cper_print_log(
+				"Invalid number of section headers: Header states %d sections, could not read section %d.\n",
+				header->SectionCount, i + 1);
 			goto fail;
 		}
 
@@ -80,25 +86,29 @@
 		remaining -= sizeof(EFI_ERROR_SECTION_DESCRIPTOR);
 
 		if (section_descriptor->SectionOffset > size) {
-			printf("Invalid section descriptor: Section offset > size.\n");
+			cper_print_log(
+				"Invalid section descriptor: Section offset > size.\n");
 			goto fail;
 		}
 
 		if (section_descriptor->SectionLength <= 0) {
-			printf("Invalid section descriptor: Section length <= 0.\n");
+			cper_print_log(
+				"Invalid section descriptor: Section length <= 0.\n");
 			goto fail;
 		}
 
 		if (section_descriptor->SectionOffset >
 		    UINT_MAX - section_descriptor->SectionLength) {
-			printf("Invalid section descriptor: Section offset + length would overflow.\n");
+			cper_print_log(
+				"Invalid section descriptor: Section offset + length would overflow.\n");
 			goto fail;
 		}
 
 		if (section_descriptor->SectionOffset +
 			    section_descriptor->SectionLength >
 		    size) {
-			printf("Invalid section descriptor: Section offset + length > size.\n");
+			cper_print_log(
+				"Invalid section descriptor: Section offset + length > size.\n");
 			goto fail;
 		}
 
@@ -127,7 +137,7 @@
 	json_object_put(sections_ir);
 	json_object_put(section_descriptors_ir);
 	json_object_put(parent);
-	printf("Failed to parse CPER file.\n");
+	cper_print_log("Failed to parse CPER file.\n");
 	return NULL;
 }
 
@@ -139,19 +149,21 @@
 	EFI_COMMON_ERROR_RECORD_HEADER header;
 	if (fread(&header, sizeof(EFI_COMMON_ERROR_RECORD_HEADER), 1,
 		  cper_file) != 1) {
-		printf("Invalid CPER file: Invalid length (log too short).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid length (log too short).\n");
 		return NULL;
 	}
 
 	//Check if the header contains the magic bytes ("CPER").
 	if (header.SignatureStart != EFI_ERROR_RECORD_SIGNATURE_START) {
-		printf("Invalid CPER file: Invalid header (incorrect signature).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid header (incorrect signature).\n");
 		return NULL;
 	}
 	fseek(cper_file, -sizeof(EFI_COMMON_ERROR_RECORD_HEADER), SEEK_CUR);
 	unsigned char *cper_buf = malloc(header.RecordLength);
 	if (fread(cper_buf, header.RecordLength, 1, cper_file) != 1) {
-		printf("File read failed\n");
+		cper_print_log("File read failed\n");
 		free(cper_buf);
 		return NULL;
 	}
@@ -348,7 +360,7 @@
 		     fru_text_len++) {
 			char c = section_descriptor->FruString[fru_text_len];
 			if (c < 0) {
-				//printf("Fru text contains non-ASCII character\n");
+				//cper_print_log("Fru text contains non-ASCII character\n");
 				fru_text_len = -1;
 				break;
 			}
@@ -421,7 +433,8 @@
 				    EFI_ERROR_SECTION_DESCRIPTOR *descriptor)
 {
 	if (descriptor->SectionLength > size) {
-		printf("Invalid CPER file: Invalid header (incorrect signature).\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid header (incorrect signature).\n");
 		return NULL;
 	}
 
@@ -444,7 +457,7 @@
 					      descriptor->SectionLength,
 					      &encoded_len);
 		if (encoded == NULL) {
-			//printf("Failed to allocate encode output buffer. \n");
+			//cper_print_log("Failed to allocate encode output buffer. \n");
 		} else {
 			section_ir = json_object_new_object();
 			json_object_object_add(section_ir, "data",
@@ -472,8 +485,9 @@
 	//Read the section descriptor out.
 	EFI_ERROR_SECTION_DESCRIPTOR *section_descriptor;
 	if (sizeof(EFI_ERROR_SECTION_DESCRIPTOR) > size) {
-		printf("Size of cper buffer was too small to read section descriptor %zu\n",
-		       size);
+		cper_print_log(
+			"Size of cper buffer was too small to read section descriptor %zu\n",
+			size);
 		return NULL;
 	}
 
@@ -487,7 +501,7 @@
 
 	if (section_begin + section_descriptor->SectionLength >= cper_end) {
 		json_object_put(ir);
-		//printf("Invalid CPER file: Invalid section descriptor (section offset + length > size).\n");
+		//cper_print_log("Invalid CPER file: Invalid section descriptor (section offset + length > size).\n");
 		return NULL;
 	}
 
@@ -513,7 +527,8 @@
 	EFI_ERROR_SECTION_DESCRIPTOR section_descriptor;
 	if (fread(&section_descriptor, sizeof(EFI_ERROR_SECTION_DESCRIPTOR), 1,
 		  cper_section_file) != 1) {
-		printf("Failed to read section descriptor for CPER single section (fread() returned an unexpected value).\n");
+		cper_print_log(
+			"Failed to read section descriptor for CPER single section (fread() returned an unexpected value).\n");
 		json_object_put(ir);
 		return NULL;
 	}
@@ -532,9 +547,10 @@
 	void *section = malloc(section_descriptor.SectionLength);
 	if (fread(section, section_descriptor.SectionLength, 1,
 		  cper_section_file) != 1) {
-		printf("Section read failed: Could not read %u bytes from global offset %d.\n",
-		       section_descriptor.SectionLength,
-		       section_descriptor.SectionOffset);
+		cper_print_log(
+			"Section read failed: Could not read %u bytes from global offset %d.\n",
+			section_descriptor.SectionLength,
+			section_descriptor.SectionOffset);
 		json_object_put(ir);
 		free(section);
 		return NULL;
diff --git a/cper-utils.c b/cper-utils.c
index ffc8ded..ae71dc4 100644
--- a/cper-utils.c
+++ b/cper-utils.c
@@ -9,6 +9,7 @@
 #include <string.h>
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
+#include <libcper/log.h>
 
 //The available severity types for CPER.
 const char *CPER_SEVERITY_TYPES[4] = { "Recoverable", "Fatal", "Corrected",
@@ -217,8 +218,9 @@
 		val->value.ui64 |= (0x01 << vbit_idx);
 		break;
 	default:
-		printf("IR to CPER: Unknown validation bits size passed, Enum IntType=%d",
-		       val->size);
+		cper_print_log(
+			"IR to CPER: Unknown validation bits size passed, Enum IntType=%d",
+			val->size);
 	}
 }
 
@@ -258,8 +260,9 @@
 		return (vbit_mask & val->value.ui64);
 
 	default:
-		printf("CPER to IR:Unknown validation bits size passed. Enum IntType: %d",
-		       val->size);
+		cper_print_log(
+			"CPER to IR:Unknown validation bits size passed. Enum IntType: %d",
+			val->size);
 	}
 	return 0;
 }
@@ -268,23 +271,24 @@
 {
 	switch (val->size) {
 	case UINT_8T:
-		printf("Validation bits: %x\n", val->value.ui8);
+		cper_print_log("Validation bits: %x\n", val->value.ui8);
 		break;
 	case UINT_16T:
-		printf("Validation bits: %x\n", val->value.ui16);
+		cper_print_log("Validation bits: %x\n", val->value.ui16);
 		break;
 
 	case UINT_32T:
-		printf("Validation bits: %x\n", val->value.ui32);
+		cper_print_log("Validation bits: %x\n", val->value.ui32);
 		break;
 
 	case UINT_64T:
-		printf("Validation bits: %llx\n", val->value.ui64);
+		cper_print_log("Validation bits: %llx\n", val->value.ui64);
 		break;
 
 	default:
-		printf("CPER to IR:Unknown validation bits size passed. Enum IntType: %d",
-		       val->size);
+		cper_print_log(
+			"CPER to IR:Unknown validation bits size passed. Enum IntType: %d",
+			val->size);
 	}
 }
 
@@ -355,7 +359,7 @@
 		century, year, month, day, hours, minutes, seconds);
 
 	if (written < 0 || written >= out_len) {
-		printf("Timestamp buffer of insufficient size\n");
+		cper_print_log("Timestamp buffer of insufficient size\n");
 		return -1;
 	}
 	return 0;
diff --git a/generator/cper-generate-cli.c b/generator/cper-generate-cli.c
index 8c570ab..036aaeb 100644
--- a/generator/cper-generate-cli.c
+++ b/generator/cper-generate-cli.c
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <libcper/log.h>
 #include <libcper/Cper.h>
 #include <libcper/generator/cper-generate.h>
 #include <libcper/generator/sections/gen-section.h>
@@ -15,6 +16,7 @@
 
 int main(int argc, char *argv[])
 {
+	cper_set_log_stdio();
 	//If help requested, print help.
 	if (argc == 2 && strcmp(argv[1], "--help") == 0) {
 		print_help();
diff --git a/generator/cper-generate.c b/generator/cper-generate.c
index 8675a78..b1b105b 100644
--- a/generator/cper-generate.c
+++ b/generator/cper-generate.c
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <libcper/log.h>
 #include <libcper/Cper.h>
 #include <libcper/generator/gen-utils.h>
 #include <libcper/generator/sections/gen-section.h>
diff --git a/include/libcper/log.h b/include/libcper/log.h
new file mode 100644
index 0000000..ccfca59
--- /dev/null
+++ b/include/libcper/log.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+
+#ifndef LIBCPER_LOG_H
+#define LIBCPER_LOG_H
+
+void cper_set_log_stdio();
+void cper_set_log_custom(void (*fn)(const char *, ...));
+
+void cper_print_log(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
+
+#endif /* LIBCPER_LOG_H */
diff --git a/ir-parse.c b/ir-parse.c
index e599b68..ef588f1 100644
--- a/ir-parse.c
+++ b/ir-parse.c
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <json.h>
+#include <libcper/log.h>
 #include <libcper/base64.h>
 #include <libcper/Cper.h>
 #include <libcper/cper-parse.h>
@@ -38,7 +39,7 @@
 	json_object *section_descriptors =
 		json_object_object_get(ir, "sectionDescriptors");
 	if (section_descriptors == NULL) {
-		printf("Invalid CPER file: No section descriptors.\n");
+		cper_print_log("Invalid CPER file: No section descriptors.\n");
 		return;
 	}
 	int amt_descriptors = json_object_array_length(section_descriptors);
@@ -57,7 +58,7 @@
 	//Run through each section in turn.
 	json_object *sections = json_object_object_get(ir, "sections");
 	if (sections == NULL) {
-		printf("Invalid CPER file: No sections.\n");
+		cper_print_log("Invalid CPER file: No sections.\n");
 		return;
 	}
 	int amt_sections = json_object_array_length(sections);
@@ -193,7 +194,8 @@
 			json_object_get_string(encoded),
 			json_object_get_string_len(encoded), &decoded_len);
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
 			free(decoded);
diff --git a/log.c b/log.c
new file mode 100644
index 0000000..2938a60
--- /dev/null
+++ b/log.c
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+
+#ifndef CPER_LOG_H
+#define CPER_LOG_H
+
+#include <stdarg.h>
+
+#ifndef CPER_NO_STDIO
+#include <stdio.h>
+#endif
+
+enum {
+	CPER_LOG_NONE,
+	CPER_LOG_STDIO,
+	CPER_LOG_CUSTOM,
+} log_type = CPER_LOG_NONE;
+
+static void (*log_custom_fn)(const char *, va_list);
+
+void cper_print_log(const char *fmt, ...)
+{
+	va_list ap;
+
+	va_start(ap, fmt);
+
+	switch (log_type) {
+	case CPER_LOG_NONE:
+		break;
+	case CPER_LOG_STDIO:
+#ifndef CPER_NO_STDIO
+		vfprintf(stderr, fmt, ap);
+		fputs("\n", stderr);
+#endif
+		break;
+	case CPER_LOG_CUSTOM:
+		log_custom_fn(fmt, ap);
+		break;
+	}
+
+	va_end(ap);
+}
+
+void cper_set_log_stdio()
+{
+	log_type = CPER_LOG_STDIO;
+}
+
+void cper_set_log_custom(void (*fn)(const char *, va_list))
+{
+	log_type = CPER_LOG_CUSTOM;
+	log_custom_fn = fn;
+}
+
+#endif /* CPER_LOG_H */
diff --git a/meson.build b/meson.build
index 6a46f42..8c7319a 100644
--- a/meson.build
+++ b/meson.build
@@ -83,16 +83,19 @@
     json_c_dep = json_c.get_variable('json_c_dep')
 endif
 
+libcper_include = ['include']
+libcper_include_dir = include_directories(libcper_include, is_system: true)
+
+
 libcper_parse_sources += files(
     'base64.c',
     'common-utils.c',
     'cper-parse.c',
     'cper-utils.c',
     'ir-parse.c',
+    'log.c',
 )
 
-libcper_include = ['include']
-libcper_include_dir = include_directories(libcper_include, is_system: true)
 subdir('include')
 
 libcper_parse = library(
@@ -108,7 +111,7 @@
 )
 libcper_parse_dep = declare_dependency(
     include_directories: libcper_include_dir,
-    link_with: libcper_parse,
+    link_with: [libcper_parse],
 )
 
 libcper_generate_sources = [
@@ -123,7 +126,8 @@
     generator_section_sources,
     version: meson.project_version(),
     include_directories: libcper_include_dir,
-    dependencies: [libcper_parse_dep, json_c_dep],
+    dependencies: [json_c_dep],
+    link_with: [libcper_parse],
     install: true,
     install_dir: get_option('libdir'),
 )
@@ -144,7 +148,8 @@
         'cper-convert',
         'cli-app/cper-convert.c',
         include_directories: libcper_include_dir,
-        dependencies: [libcper_parse_dep, json_c_dep],
+        dependencies: [json_c_dep],
+        link_with: [libcper_parse, libcper_generate],
         install: true,
         install_dir: get_option('bindir'),
     )
@@ -154,7 +159,7 @@
         'generator/cper-generate-cli.c',
         edk_sources,
         include_directories: libcper_include_dir,
-        dependencies: [libcper_generate_dep],
+        link_with: [libcper_parse, libcper_generate],
         install: true,
         install_dir: get_option('bindir'),
     )
diff --git a/sections/cper-section-ampere.c b/sections/cper-section-ampere.c
index 34d0829..5755fa1 100644
--- a/sections/cper-section-ampere.c
+++ b/sections/cper-section-ampere.c
@@ -3,6 +3,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-ampere.h>
+#include <libcper/log.h>
 
 //Converts the given processor-generic CPER section into JSON IR.
 json_object *cper_section_ampere_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-arm.c b/sections/cper-section-arm.c
index cd06131..6961d16 100644
--- a/sections/cper-section-arm.c
+++ b/sections/cper-section-arm.c
@@ -12,6 +12,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-arm.h>
+#include <libcper/log.h>
 
 //Private pre-definitions.
 json_object *
@@ -123,7 +124,8 @@
 	    (record->ErrInfoNum * sizeof(EFI_ARM_ERROR_INFORMATION_ENTRY))) {
 		json_object_put(error_info_array);
 		json_object_put(section_ir);
-		printf("Invalid CPER file: Invalid processor error info num.\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid processor error info num.\n");
 		return NULL;
 	}
 	for (int i = 0; i < record->ErrInfoNum; i++) {
@@ -147,7 +149,8 @@
 		    sizeof(EFI_ARM_CONTEXT_INFORMATION_HEADER)) {
 			json_object_put(context_info_array);
 			json_object_put(section_ir);
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			return NULL;
 		}
 		EFI_ARM_CONTEXT_INFORMATION_HEADER *header =
@@ -161,7 +164,8 @@
 		if (processor_context == NULL) {
 			json_object_put(context_info_array);
 			json_object_put(section_ir);
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			return NULL;
 		}
 		json_object_array_add(context_info_array, processor_context);
@@ -177,7 +181,8 @@
 			if (remaining_size < input_size) {
 				json_object_put(vendor_specific);
 				json_object_put(section_ir);
-				printf("Invalid CPER file: Invalid vendor-specific info length.\n");
+				cper_print_log(
+					"Invalid CPER file: Invalid vendor-specific info length.\n");
 				return NULL;
 			}
 			int32_t encoded_len = 0;
@@ -186,7 +191,8 @@
 			if (encoded == NULL) {
 				json_object_put(vendor_specific);
 				json_object_put(section_ir);
-				printf("base64 encode of vendorSpecificInfo failed\n");
+				cper_print_log(
+					"base64 encode of vendorSpecificInfo failed\n");
 				return NULL;
 			}
 			json_object_object_add(vendor_specific, "data",
@@ -197,7 +203,8 @@
 			json_object_object_add(section_ir, "vendorSpecificInfo",
 					       vendor_specific);
 		} else {
-			printf("vendorSpecificInfo is marked valid but not present in binary\n");
+			cper_print_log(
+				"vendorSpecificInfo is marked valid but not present in binary\n");
 		}
 	}
 
@@ -497,7 +504,8 @@
 				 const UINT8 **cur_pos, UINT32 *remaining_size)
 {
 	if (header->RegisterArraySize > *remaining_size) {
-		printf("Invalid CPER file: Invalid processor context info num.\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid processor context info num.\n");
 		return NULL;
 	}
 
@@ -526,12 +534,14 @@
 	switch (header->RegisterContextType) {
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_GPR:
 		if (*remaining_size < sizeof(EFI_ARM_V8_AARCH32_GPR)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_V8_AARCH32_GPR)) {
-			printf("Invalid CPER file: Not enough bytes for aarch32 gpr\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch32 gpr\n");
 			goto fail;
 		}
 		register_array = uniform_struct_to_ir(
@@ -542,12 +552,14 @@
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_EL1:
 		if (*remaining_size <
 		    sizeof(EFI_ARM_AARCH32_EL1_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_AARCH32_EL1_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Not enough bytes for aarch32 el1\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch32 el1\n");
 			goto fail;
 		}
 		register_array = uniform_struct_to_ir(
@@ -559,12 +571,14 @@
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_EL2:
 		if (*remaining_size <
 		    sizeof(EFI_ARM_AARCH32_EL2_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_AARCH32_EL2_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Not enough bytes for aarch32 el2\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch32 el2\n");
 			goto fail;
 		}
 		register_array = uniform_struct_to_ir(
@@ -578,12 +592,14 @@
 		if (*remaining_size <
 		    sizeof(EFI_ARM_AARCH32_SECURE_CONTEXT_REGISTERS)) {
 			json_object_put(context_ir);
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			return NULL;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_AARCH32_SECURE_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Not enough bytes for aarch32 secure\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch32 secure\n");
 			goto fail;
 		}
 		register_array = uniform_struct_to_ir(
@@ -594,12 +610,14 @@
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_GPR:
 		if (*remaining_size < sizeof(EFI_ARM_V8_AARCH64_GPR)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_V8_AARCH64_GPR)) {
-			printf("Invalid CPER file: Not enough bytes for aarch64 gpr\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch64 gpr\n");
 			goto fail;
 		}
 		register_array = uniform_struct64_to_ir(
@@ -610,12 +628,14 @@
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_EL1:
 		if (*remaining_size <
 		    sizeof(EFI_ARM_AARCH64_EL1_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_AARCH64_EL1_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Not enough bytes for aarch64 el1\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch64 el1\n");
 			goto fail;
 		}
 		register_array = uniform_struct64_to_ir(
@@ -627,12 +647,14 @@
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_EL2:
 		if (*remaining_size <
 		    sizeof(EFI_ARM_AARCH64_EL2_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_AARCH64_EL2_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Not enough bytes for aarch64 el2\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch64 el2\n");
 			goto fail;
 		}
 		register_array = uniform_struct64_to_ir(
@@ -644,12 +666,14 @@
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_EL3:
 		if (*remaining_size <
 		    sizeof(EFI_ARM_AARCH64_EL3_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_AARCH64_EL3_CONTEXT_REGISTERS)) {
-			printf("Invalid CPER file: Not enough bytes for aarch64 el3\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for aarch64 el3\n");
 			goto fail;
 		}
 		register_array = uniform_struct64_to_ir(
@@ -660,12 +684,14 @@
 		break;
 	case EFI_ARM_CONTEXT_TYPE_MISC:
 		if (*remaining_size < sizeof(EFI_ARM_MISC_CONTEXT_REGISTER)) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		if (header->RegisterArraySize <
 		    sizeof(EFI_ARM_MISC_CONTEXT_REGISTER)) {
-			printf("Invalid CPER file: Not enough bytes for misc\n");
+			cper_print_log(
+				"Invalid CPER file: Not enough bytes for misc\n");
 			goto fail;
 		}
 		register_array = cper_arm_misc_register_array_to_ir(
@@ -673,7 +699,8 @@
 		break;
 	default:
 		if (*remaining_size < header->RegisterArraySize) {
-			printf("Invalid CPER file: Invalid processor context info num.\n");
+			cper_print_log(
+				"Invalid CPER file: Invalid processor context info num.\n");
 			goto fail;
 		}
 		//Unknown register array type, add as base64 data instead.
@@ -1274,7 +1301,7 @@
 				       &decoded_len);
 
 	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
+		cper_print_log("Failed to allocate decode output buffer. \n");
 	} else {
 		//Flush out to stream.
 		fwrite(&decoded, decoded_len, 1, out);
diff --git a/sections/cper-section-ccix-per.c b/sections/cper-section-ccix-per.c
index d68f422..a8a5310 100644
--- a/sections/cper-section-ccix-per.c
+++ b/sections/cper-section-ccix-per.c
@@ -11,6 +11,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-ccix-per.h>
+#include <libcper/log.h>
 
 //Converts a single CCIX PER log CPER section into JSON IR.
 json_object *cper_section_ccix_per_to_ir(const UINT8 *section, UINT32 size)
@@ -58,7 +59,8 @@
 						      remaining_length,
 						      &encoded_len);
 			if (encoded == NULL) {
-				printf("Failed to allocate encode output buffer. \n");
+				cper_print_log(
+					"Failed to allocate encode output buffer. \n");
 			} else {
 				json_object_object_add(
 					section_ir, "ccixPERLog",
@@ -120,7 +122,8 @@
 			json_object_get_string(encoded),
 			json_object_get_string_len(encoded), &decoded_len);
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
 			fflush(out);
diff --git a/sections/cper-section-cxl-component.c b/sections/cper-section-cxl-component.c
index cae152b..c4e8169 100644
--- a/sections/cper-section-cxl-component.c
+++ b/sections/cper-section-cxl-component.c
@@ -10,6 +10,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-cxl-component.h>
+#include <libcper/log.h>
 
 //Converts a single CXL component error CPER section into JSON IR.
 json_object *cper_section_cxl_component_to_ir(const UINT8 *section, UINT32 size)
@@ -82,7 +83,8 @@
 			char *encoded = base64_encode(cur_pos, remaining_len,
 						      &encoded_len);
 			if (encoded == NULL) {
-				printf("Failed to allocate encode output buffer. \n");
+				cper_print_log(
+					"Failed to allocate encode output buffer. \n");
 				json_object_put(section_ir);
 				return NULL;
 			}
@@ -166,7 +168,8 @@
 			json_object_get_string_len(encoded), &decoded_len);
 
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
 			fflush(out);
diff --git a/sections/cper-section-cxl-protocol.c b/sections/cper-section-cxl-protocol.c
index 1a9b33b..ebf3648 100644
--- a/sections/cper-section-cxl-protocol.c
+++ b/sections/cper-section-cxl-protocol.c
@@ -10,6 +10,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-cxl-protocol.h>
+#include <libcper/log.h>
 
 //Converts a single CXL protocol error CPER section into JSON IR.
 json_object *cper_section_cxl_protocol_to_ir(const UINT8 *section, UINT32 size)
@@ -135,7 +136,8 @@
 			(UINT8 *)cxl_protocol_error->CapabilityStructure.PcieCap,
 			60, &encoded_len);
 		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate encode output buffer. \n");
 			json_object_put(section_ir);
 
 			return NULL;
@@ -190,7 +192,8 @@
 					&encoded_len);
 
 		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate encode output buffer. \n");
 			json_object_put(section_ir);
 			return NULL;
 		}
@@ -295,7 +298,8 @@
 				&decoded_len);
 
 			if (decoded == NULL) {
-				printf("Failed to allocate decode output buffer. \n");
+				cper_print_log(
+					"Failed to allocate decode output buffer. \n");
 			} else {
 				memcpy(section_cper->CapabilityStructure.PcieCap,
 				       decoded, decoded_len);
@@ -338,7 +342,8 @@
 					json_object_get_string_len(encodedsrc),
 					&decoded_len);
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
 			fflush(out);
@@ -353,7 +358,8 @@
 					json_object_get_string_len(encodederr),
 					&decoded_len);
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
 			fflush(out);
diff --git a/sections/cper-section-dmar-generic.c b/sections/cper-section-dmar-generic.c
index e745d2b..d75647e 100644
--- a/sections/cper-section-dmar-generic.c
+++ b/sections/cper-section-dmar-generic.c
@@ -9,6 +9,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-dmar-generic.h>
+#include <libcper/log.h>
 
 //Converts a single generic DMAr CPER section into JSON IR.
 json_object *cper_section_dmar_generic_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-dmar-iommu.c b/sections/cper-section-dmar-iommu.c
index c411cf2..df22ce0 100644
--- a/sections/cper-section-dmar-iommu.c
+++ b/sections/cper-section-dmar-iommu.c
@@ -11,6 +11,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-dmar-iommu.h>
+#include <libcper/log.h>
 
 //Converts a single IOMMU specific DMAr CPER section into JSON IR.
 json_object *cper_section_dmar_iommu_to_ir(const UINT8 *section, UINT32 size)
@@ -40,7 +41,7 @@
 	char *encoded = base64_encode((UINT8 *)iommu_error->EventLogEntry, 16,
 				      &encoded_len);
 	if (encoded == NULL) {
-		printf("Failed to allocate encode output buffer. \n");
+		cper_print_log("Failed to allocate encode output buffer. \n");
 
 		return NULL;
 	}
@@ -55,7 +56,7 @@
 	encoded = base64_encode((UINT8 *)iommu_error->DeviceTableEntry, 32,
 				&encoded_len);
 	if (encoded == NULL) {
-		printf("Failed to allocate encode output buffer. \n");
+		cper_print_log("Failed to allocate encode output buffer. \n");
 		return NULL;
 	}
 	json_object_object_add(section_ir, "deviceTableEntry",
@@ -103,7 +104,7 @@
 				       json_object_get_string_len(encoded),
 				       &decoded_len);
 	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
+		cper_print_log("Failed to allocate decode output buffer. \n");
 	} else {
 		memcpy(section_cper->EventLogEntry, decoded, decoded_len);
 		free(decoded);
@@ -116,7 +117,7 @@
 				json_object_get_string_len(encoded),
 				&decoded_len);
 	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
+		cper_print_log("Failed to allocate decode output buffer. \n");
 	} else {
 		memcpy(section_cper->DeviceTableEntry, decoded, decoded_len);
 		free(decoded);
diff --git a/sections/cper-section-dmar-vtd.c b/sections/cper-section-dmar-vtd.c
index ad86293..fcbce18 100644
--- a/sections/cper-section-dmar-vtd.c
+++ b/sections/cper-section-dmar-vtd.c
@@ -11,6 +11,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-dmar-vtd.h>
+#include <libcper/log.h>
 
 //Converts a single VT-d specific DMAr CPER section into JSON IR.
 json_object *cper_section_dmar_vtd_to_ir(const UINT8 *section, UINT32 size)
@@ -100,7 +101,7 @@
 	encoded = base64_encode((UINT8 *)vtd_error->ContextEntry, 16,
 				&encoded_len);
 	if (encoded == NULL) {
-		printf("Failed to allocate encode output buffer. \n");
+		cper_print_log("Failed to allocate encode output buffer. \n");
 	} else {
 		json_object_object_add(section_ir, "contextEntry",
 				       json_object_new_string_len(encoded,
@@ -188,7 +189,7 @@
 				       json_object_get_string_len(encoded),
 				       &decoded_len);
 	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
+		cper_print_log("Failed to allocate decode output buffer. \n");
 	} else {
 		memcpy(section_cper->RootEntry, decoded, decoded_len);
 		free(decoded);
@@ -202,7 +203,7 @@
 				json_object_get_string_len(encoded),
 				&decoded_len);
 	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
+		cper_print_log("Failed to allocate decode output buffer. \n");
 
 	} else {
 		memcpy(section_cper->ContextEntry, decoded, decoded_len);
diff --git a/sections/cper-section-firmware.c b/sections/cper-section-firmware.c
index 327d70b..b88d69e 100644
--- a/sections/cper-section-firmware.c
+++ b/sections/cper-section-firmware.c
@@ -9,6 +9,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-firmware.h>
+#include <libcper/log.h>
 
 //Converts a single firmware CPER section into JSON IR.
 json_object *cper_section_firmware_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-generic.c b/sections/cper-section-generic.c
index 0937de4..8117419 100644
--- a/sections/cper-section-generic.c
+++ b/sections/cper-section-generic.c
@@ -11,6 +11,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-generic.h>
+#include <libcper/log.h>
 
 //Converts the given processor-generic CPER section into JSON IR.
 json_object *cper_section_generic_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-ia32x64.c b/sections/cper-section-ia32x64.c
index fe3acca..8f84c11 100644
--- a/sections/cper-section-ia32x64.c
+++ b/sections/cper-section-ia32x64.c
@@ -11,6 +11,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-ia32x64.h>
+#include <libcper/log.h>
 
 //Private pre-definitions.
 json_object *cper_ia32x64_processor_error_info_to_ir(
@@ -99,7 +100,8 @@
 			      sizeof(EFI_IA32_X64_PROCESS_ERROR_INFO))) {
 		json_object_put(error_info_array);
 		json_object_put(record_ir);
-		printf("Invalid CPER file: Invalid processor error info num.\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid processor error info num.\n");
 		return NULL;
 	}
 
@@ -119,7 +121,8 @@
 	if (remaining_size < (processor_context_info_num *
 			      sizeof(EFI_IA32_X64_PROCESSOR_CONTEXT_INFO))) {
 		json_object_put(record_ir);
-		printf("Invalid CPER file: Invalid processor context info num.\n");
+		cper_print_log(
+			"Invalid CPER file: Invalid processor context info num.\n");
 		return NULL;
 	}
 	EFI_IA32_X64_PROCESSOR_CONTEXT_INFO *current_context_info =
@@ -210,7 +213,8 @@
 			break;
 		default:
 			//Unknown check information.
-			printf("WARN: Invalid/unknown check information GUID found in IA32/x64 CPER section. Ignoring.\n");
+			cper_print_log(
+				"WARN: Invalid/unknown check information GUID found in IA32/x64 CPER section. Ignoring.\n");
 			break;
 		}
 
@@ -522,7 +526,8 @@
 					      context_info->ArraySize,
 					      &encoded_len);
 		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate encode output buffer. \n");
 		} else {
 			register_array = json_object_new_object();
 			json_object_object_add(register_array, "data",
@@ -802,7 +807,8 @@
 			break;
 		default:
 			//Unknown check information.
-			printf("WARN: Invalid/unknown check information GUID found in IA32/x64 CPER section. Ignoring.\n");
+			cper_print_log(
+				"WARN: Invalid/unknown check information GUID found in IA32/x64 CPER section. Ignoring.\n");
 			break;
 		}
 		add_to_valid_bitfield(&ui64Type, 0);
@@ -1028,7 +1034,8 @@
 		int j_size = json_object_get_string_len(encoded);
 		UINT8 *decoded = base64_decode(j_string, j_size, &decoded_len);
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
 			fflush(out);
diff --git a/sections/cper-section-ipf.c b/sections/cper-section-ipf.c
index 2cf6f13..fb9243e 100644
--- a/sections/cper-section-ipf.c
+++ b/sections/cper-section-ipf.c
@@ -9,6 +9,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-ipf.h>
+#include <libcper/log.h>
 
 json_object *cper_ipf_mod_error_read_array(EFI_IPF_MOD_ERROR_INFO **cur_error,
 					   int num_to_read);
diff --git a/sections/cper-section-memory.c b/sections/cper-section-memory.c
index b58bf82..347039a 100644
--- a/sections/cper-section-memory.c
+++ b/sections/cper-section-memory.c
@@ -9,6 +9,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-memory.h>
+#include <libcper/log.h>
 
 //Converts a single memory error CPER section into JSON IR.
 json_object *cper_section_platform_memory_to_ir(const UINT8 *section,
diff --git a/sections/cper-section-nvidia.c b/sections/cper-section-nvidia.c
index 874e616..ae14330 100644
--- a/sections/cper-section-nvidia.c
+++ b/sections/cper-section-nvidia.c
@@ -10,6 +10,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-nvidia.h>
+#include <libcper/log.h>
 
 //Converts a single NVIDIA CPER section into JSON IR.
 json_object *cper_section_nvidia_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-pci-bus.c b/sections/cper-section-pci-bus.c
index ac13187..60840e7 100644
--- a/sections/cper-section-pci-bus.c
+++ b/sections/cper-section-pci-bus.c
@@ -10,6 +10,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-pci-bus.h>
+#include <libcper/log.h>
 
 //Converts a single PCI/PCI-X bus CPER section into JSON IR.
 json_object *cper_section_pci_bus_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-pci-dev.c b/sections/cper-section-pci-dev.c
index 9f89494..359e56e 100644
--- a/sections/cper-section-pci-dev.c
+++ b/sections/cper-section-pci-dev.c
@@ -9,6 +9,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-pci-dev.h>
+#include <libcper/log.h>
 
 //Converts a single PCI/PCI-X device CPER section into JSON IR.
 json_object *cper_section_pci_dev_to_ir(const UINT8 *section, UINT32 size)
diff --git a/sections/cper-section-pcie.c b/sections/cper-section-pcie.c
index e616728..ee8a1d9 100644
--- a/sections/cper-section-pcie.c
+++ b/sections/cper-section-pcie.c
@@ -11,6 +11,7 @@
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 #include <libcper/sections/cper-section-pcie.h>
+#include <libcper/log.h>
 
 struct aer_info_registers {
 	UINT32 pcie_capability_header;
@@ -150,7 +151,8 @@
 			base64_encode((UINT8 *)pcie_error->Capability.PcieCap,
 				      60, &encoded_len);
 		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate encode output buffer. \n");
 		} else {
 			json_object *capability = json_object_new_object();
 			json_object_object_add(capability, "data",
@@ -172,7 +174,8 @@
 		encoded = base64_encode((UINT8 *)pcie_error->AerInfo.PcieAer,
 					96, &encoded_len);
 		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate encode output buffer. \n");
 		} else {
 			json_object_object_add(aer_capability_ir, "data",
 					       json_object_new_string_len(
@@ -341,7 +344,8 @@
 			json_object_get_string(encoded),
 			json_object_get_string_len(encoded), &decoded_len);
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			memcpy(section_cper->Capability.PcieCap, decoded,
 			       decoded_len);
@@ -363,7 +367,8 @@
 					&decoded_len);
 
 		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
+			cper_print_log(
+				"Failed to allocate decode output buffer. \n");
 		} else {
 			memcpy(section_cper->AerInfo.PcieAer, decoded,
 			       decoded_len);
diff --git a/tests/ir-tests.cpp b/tests/ir-tests.cpp
index 00bbf6a..97dad1b 100644
--- a/tests/ir-tests.cpp
+++ b/tests/ir-tests.cpp
@@ -203,6 +203,15 @@
 		<< single_section << ") with message: " << error_message;
 }
 
+std::string to_hex(char *input, size_t size)
+{
+	std::string out;
+	for (char c : std::span<unsigned char>((unsigned char *)input, size)) {
+		out += std::format("{:02x}", static_cast<unsigned char>(c));
+	}
+	return out;
+}
+
 //Checks for binary round-trip equality for a given randomly generated CPER record.
 void cper_log_section_binary_test(const char *section_name, int single_section,
 				  GEN_VALID_BITS_TEST_TYPE validBitsType)
@@ -239,8 +248,8 @@
 
 	std::cout << "size: " << size << ", cper_buf_size: " << cper_buf_size
 		  << std::endl;
-	EXPECT_EQ(std::string_view(buf, size),
-		  std::string_view(cper_buf, std::min(size, cper_buf_size)))
+	EXPECT_EQ(to_hex(buf, size),
+		  to_hex(cper_buf, std::min(size, cper_buf_size)))
 		<< "Binary output was not identical to input (single section mode = "
 		<< single_section << ").";
 
