diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp
index af3d768aa..8fb7b3e2f 100644
--- a/src/libslic3r/Format/3mf.cpp
+++ b/src/libslic3r/Format/3mf.cpp
@@ -22,6 +22,7 @@
 #include <boost/nowide/fstream.hpp>
 #include <boost/nowide/cstdio.hpp>
 #include <boost/spirit/include/karma.hpp>
+#include <boost/log/trivial.hpp>
 
 #include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/xml_parser.hpp>
@@ -257,9 +258,8 @@ namespace Slic3r {
     public:
         void log_errors()
         {
-            for (const std::string& error : m_errors) {
-                printf("%s\n", error.c_str());
-            }
+            for (const std::string& error : m_errors)
+                BOOST_LOG_TRIVIAL(error) << error;
         }
     };
 
diff --git a/src/libslic3r/Format/AMF.cpp b/src/libslic3r/Format/AMF.cpp
index 14d23011e..9b71990ea 100644
--- a/src/libslic3r/Format/AMF.cpp
+++ b/src/libslic3r/Format/AMF.cpp
@@ -24,6 +24,7 @@ namespace pt = boost::property_tree;
 
 #include <boost/filesystem/operations.hpp>
 #include <boost/algorithm/string.hpp>
+#include <boost/log/trivial.hpp>
 #include <boost/nowide/fstream.hpp>
 #include "miniz_extension.hpp"
 
@@ -827,7 +828,7 @@ void AMFParserContext::endDocument()
 {
     for (const auto &object : m_object_instances_map) {
         if (object.second.idx == -1) {
-            printf("Undefined object %s referenced in constellation\n", object.first.c_str());
+            BOOST_LOG_TRIVIAL(error) << "Undefined object " << object.first.c_str() << " referenced in constellation";
             continue;
         }
         for (const Instance &instance : object.second.instances)
@@ -850,13 +851,13 @@ bool load_amf_file(const char *path, DynamicPrintConfig *config, Model *model)
 
     XML_Parser parser = XML_ParserCreate(nullptr); // encoding
     if (!parser) {
-        printf("Couldn't allocate memory for parser\n");
+        BOOST_LOG_TRIVIAL(error) << "Couldn't allocate memory for parser";
         return false;
     }
 
     FILE *pFile = boost::nowide::fopen(path, "rt");
     if (pFile == nullptr) {
-        printf("Cannot open file %s\n", path);
+        BOOST_LOG_TRIVIAL(error) << "Cannot open file " << path;
         return false;
     }
 
@@ -870,14 +871,12 @@ bool load_amf_file(const char *path, DynamicPrintConfig *config, Model *model)
     for (;;) {
         int len = (int)fread(buff, 1, 8192, pFile);
         if (ferror(pFile)) {
-            printf("AMF parser: Read error\n");
+            BOOST_LOG_TRIVIAL(error) << "AMF parser: Read error";
             break;
         }
         int done = feof(pFile);
         if (XML_Parse(parser, buff, len, done) == XML_STATUS_ERROR || ctx.error()) {
-            printf("AMF parser: Parse error at line %d:\n%s\n",
-                  (int)XML_GetCurrentLineNumber(parser),
-                  ctx.error_message());
+            BOOST_LOG_TRIVIAL(error) << "AMF parser: Parse error at line " << int(XML_GetCurrentLineNumber(parser)) << ": " << ctx.error_message();
             break;
         }
         if (done) {
@@ -908,14 +907,14 @@ bool extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_fi
 {
     if (stat.m_uncomp_size == 0)
     {
-        printf("Found invalid size\n");
+        BOOST_LOG_TRIVIAL(error) << "Found invalid size";
         close_zip_reader(&archive);
         return false;
     }
 
     XML_Parser parser = XML_ParserCreate(nullptr); // encoding
     if (!parser) {
-        printf("Couldn't allocate memory for parser\n");
+        BOOST_LOG_TRIVIAL(error) << "Couldn't allocate memory for parser";
         close_zip_reader(&archive);
         return false;
     }
@@ -954,14 +953,14 @@ bool extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_fi
     }
     catch (std::exception& e)
     {
-        printf("%s\n", e.what());
+        BOOST_LOG_TRIVIAL(error) << "Error reading AMF file: " << e.what();
         close_zip_reader(&archive);
         return false;
     }
 
     if (res == 0)
     {
-        printf("Error while extracting model data from zip archive");
+        BOOST_LOG_TRIVIAL(error) << "Error while extracting model data from zip archive";
         close_zip_reader(&archive);
         return false;
     }
@@ -990,7 +989,7 @@ bool load_amf_archive(const char* path, DynamicPrintConfig* config, Model* model
 
     if (!open_zip_reader(&archive, path))
     {
-        printf("Unable to init zip reader\n");
+        BOOST_LOG_TRIVIAL(error) << "Unable to init zip reader";
         return false;
     }
 
@@ -1009,7 +1008,7 @@ bool load_amf_archive(const char* path, DynamicPrintConfig* config, Model* model
                     if (!extract_model_from_archive(archive, stat, config, model, check_version))
                     {
                         close_zip_reader(&archive);
-                        printf("Archive does not contain a valid model");
+                        BOOST_LOG_TRIVIAL(error) << "Archive does not contain a valid model";
                         return false;
                     }
                 }
@@ -1248,7 +1247,7 @@ bool store_amf(const char* path, Model* model, const DynamicPrintConfig* config,
         if (!object->instances.empty()) {
             for (ModelInstance *instance : object->instances) {
                 char buf[512];
-                sprintf(buf,
+                ::sprintf(buf,
                     "    <instance objectid=\"%zu\">\n"
                     "      <deltax>%lf</deltax>\n"
                     "      <deltay>%lf</deltay>\n"