Commit 0ad4e190ffbb85ea2db5a05d43cd4f81d98cfe63
1 parent
7049588b
Make QPDFLogger() private and provide create method
Showing
5 changed files
with
39 additions
and
32 deletions
include/qpdf/QPDFLogger.hh
| @@ -31,7 +31,7 @@ class QPDFLogger | @@ -31,7 +31,7 @@ class QPDFLogger | ||
| 31 | { | 31 | { |
| 32 | public: | 32 | public: |
| 33 | QPDF_DLL | 33 | QPDF_DLL |
| 34 | - QPDFLogger(); | 34 | + static std::shared_ptr<QPDFLogger> create(); |
| 35 | 35 | ||
| 36 | // Return the default logger. In general, you should use the | 36 | // Return the default logger. In general, you should use the |
| 37 | // default logger. You can also create your own loggers and use | 37 | // default logger. You can also create your own loggers and use |
| @@ -152,6 +152,7 @@ class QPDFLogger | @@ -152,6 +152,7 @@ class QPDFLogger | ||
| 152 | void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream); | 152 | void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream); |
| 153 | 153 | ||
| 154 | private: | 154 | private: |
| 155 | + QPDFLogger(); | ||
| 155 | std::shared_ptr<Pipeline> | 156 | std::shared_ptr<Pipeline> |
| 156 | throwIfNull(std::shared_ptr<Pipeline>, bool null_okay); | 157 | throwIfNull(std::shared_ptr<Pipeline>, bool null_okay); |
| 157 | 158 |
libqpdf/QPDF.cc
| @@ -362,7 +362,7 @@ QPDF::setLogger(std::shared_ptr<QPDFLogger> l) | @@ -362,7 +362,7 @@ QPDF::setLogger(std::shared_ptr<QPDFLogger> l) | ||
| 362 | void | 362 | void |
| 363 | QPDF::setOutputStreams(std::ostream* out, std::ostream* err) | 363 | QPDF::setOutputStreams(std::ostream* out, std::ostream* err) |
| 364 | { | 364 | { |
| 365 | - setLogger(std::make_shared<QPDFLogger>()); | 365 | + setLogger(QPDFLogger::create()); |
| 366 | this->m->log->setOutputStreams(out, err); | 366 | this->m->log->setOutputStreams(out, err); |
| 367 | } | 367 | } |
| 368 | 368 |
libqpdf/QPDFJob.cc
| @@ -460,7 +460,7 @@ QPDFJob::setLogger(std::shared_ptr<QPDFLogger> l) | @@ -460,7 +460,7 @@ QPDFJob::setLogger(std::shared_ptr<QPDFLogger> l) | ||
| 460 | void | 460 | void |
| 461 | QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err) | 461 | QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err) |
| 462 | { | 462 | { |
| 463 | - setLogger(std::make_shared<QPDFLogger>()); | 463 | + setLogger(QPDFLogger::create()); |
| 464 | this->m->log->setOutputStreams(out, err); | 464 | this->m->log->setOutputStreams(out, err); |
| 465 | } | 465 | } |
| 466 | 466 |
libqpdf/QPDFLogger.cc
| @@ -65,9 +65,15 @@ QPDFLogger::QPDFLogger() : | @@ -65,9 +65,15 @@ QPDFLogger::QPDFLogger() : | ||
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | std::shared_ptr<QPDFLogger> | 67 | std::shared_ptr<QPDFLogger> |
| 68 | +QPDFLogger::create() | ||
| 69 | +{ | ||
| 70 | + return std::shared_ptr<QPDFLogger>(new QPDFLogger); | ||
| 71 | +} | ||
| 72 | + | ||
| 73 | +std::shared_ptr<QPDFLogger> | ||
| 68 | QPDFLogger::defaultLogger() | 74 | QPDFLogger::defaultLogger() |
| 69 | { | 75 | { |
| 70 | - static auto l = std::make_shared<QPDFLogger>(); | 76 | + static auto l = create(); |
| 71 | return l; | 77 | return l; |
| 72 | } | 78 | } |
| 73 | 79 |
libtests/logger.cc
| @@ -39,64 +39,64 @@ test2() | @@ -39,64 +39,64 @@ test2() | ||
| 39 | { | 39 | { |
| 40 | // First call saveToStandardOutput. Then use info, which then to | 40 | // First call saveToStandardOutput. Then use info, which then to |
| 41 | // go stderr. | 41 | // go stderr. |
| 42 | - QPDFLogger l; | ||
| 43 | - l.saveToStandardOutput(true); | ||
| 44 | - l.info(std::string("info to stderr\n")); | ||
| 45 | - *(l.getSave()) << "save to stdout\n"; | ||
| 46 | - l.setInfo(nullptr); | ||
| 47 | - l.info("info still to stderr\n"); | ||
| 48 | - l.setSave(nullptr, false); | ||
| 49 | - l.setInfo(nullptr); | ||
| 50 | - l.info("info back to stdout\n"); | 42 | + auto l = QPDFLogger::create(); |
| 43 | + l->saveToStandardOutput(true); | ||
| 44 | + l->info(std::string("info to stderr\n")); | ||
| 45 | + *(l->getSave()) << "save to stdout\n"; | ||
| 46 | + l->setInfo(nullptr); | ||
| 47 | + l->info("info still to stderr\n"); | ||
| 48 | + l->setSave(nullptr, false); | ||
| 49 | + l->setInfo(nullptr); | ||
| 50 | + l->info("info back to stdout\n"); | ||
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | static void | 53 | static void |
| 54 | test3() | 54 | test3() |
| 55 | { | 55 | { |
| 56 | // Error/warning | 56 | // Error/warning |
| 57 | - QPDFLogger l; | 57 | + auto l = QPDFLogger::create(); |
| 58 | 58 | ||
| 59 | // Warning follows error when error is set explicitly. | 59 | // Warning follows error when error is set explicitly. |
| 60 | std::string errors; | 60 | std::string errors; |
| 61 | auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors); | 61 | auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors); |
| 62 | - l.setError(pl_error); | ||
| 63 | - l.warn("warn follows error\n"); | 62 | + l->setError(pl_error); |
| 63 | + l->warn("warn follows error\n"); | ||
| 64 | assert(errors == "warn follows error\n"); | 64 | assert(errors == "warn follows error\n"); |
| 65 | - l.error("error too\n"); | 65 | + l->error("error too\n"); |
| 66 | assert(errors == "warn follows error\nerror too\n"); | 66 | assert(errors == "warn follows error\nerror too\n"); |
| 67 | 67 | ||
| 68 | // Set warnings -- now they're separate | 68 | // Set warnings -- now they're separate |
| 69 | std::string warnings; | 69 | std::string warnings; |
| 70 | auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings); | 70 | auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings); |
| 71 | - l.setWarn(pl_warn); | ||
| 72 | - l.warn(std::string("warning now separate\n")); | ||
| 73 | - l.error(std::string("new error\n")); | 71 | + l->setWarn(pl_warn); |
| 72 | + l->warn(std::string("warning now separate\n")); | ||
| 73 | + l->error(std::string("new error\n")); | ||
| 74 | assert(warnings == "warning now separate\n"); | 74 | assert(warnings == "warning now separate\n"); |
| 75 | assert(errors == "warn follows error\nerror too\nnew error\n"); | 75 | assert(errors == "warn follows error\nerror too\nnew error\n"); |
| 76 | std::string errors2; | 76 | std::string errors2; |
| 77 | pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2); | 77 | pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2); |
| 78 | - l.setError(pl_error); | ||
| 79 | - l.warn("new warning\n"); | ||
| 80 | - l.error("another new error\n"); | 78 | + l->setError(pl_error); |
| 79 | + l->warn("new warning\n"); | ||
| 80 | + l->error("another new error\n"); | ||
| 81 | assert(warnings == "warning now separate\nnew warning\n"); | 81 | assert(warnings == "warning now separate\nnew warning\n"); |
| 82 | assert(errors == "warn follows error\nerror too\nnew error\n"); | 82 | assert(errors == "warn follows error\nerror too\nnew error\n"); |
| 83 | assert(errors2 == "another new error\n"); | 83 | assert(errors2 == "another new error\n"); |
| 84 | 84 | ||
| 85 | // Restore warnings to default -- follows error again | 85 | // Restore warnings to default -- follows error again |
| 86 | - l.setWarn(nullptr); | ||
| 87 | - l.warn("warning 3\n"); | ||
| 88 | - l.error("error 3\n"); | 86 | + l->setWarn(nullptr); |
| 87 | + l->warn("warning 3\n"); | ||
| 88 | + l->error("error 3\n"); | ||
| 89 | assert(warnings == "warning now separate\nnew warning\n"); | 89 | assert(warnings == "warning now separate\nnew warning\n"); |
| 90 | assert(errors == "warn follows error\nerror too\nnew error\n"); | 90 | assert(errors == "warn follows error\nerror too\nnew error\n"); |
| 91 | assert(errors2 == "another new error\nwarning 3\nerror 3\n"); | 91 | assert(errors2 == "another new error\nwarning 3\nerror 3\n"); |
| 92 | 92 | ||
| 93 | // Restore everything to default | 93 | // Restore everything to default |
| 94 | - l.setInfo(nullptr); | ||
| 95 | - l.setWarn(nullptr); | ||
| 96 | - l.setError(nullptr); | ||
| 97 | - l.info("after reset, info to stdout\n"); | ||
| 98 | - l.warn("after reset, warn to stderr\n"); | ||
| 99 | - l.error("after reset, error to stderr\n"); | 94 | + l->setInfo(nullptr); |
| 95 | + l->setWarn(nullptr); | ||
| 96 | + l->setError(nullptr); | ||
| 97 | + l->info("after reset, info to stdout\n"); | ||
| 98 | + l->warn("after reset, warn to stderr\n"); | ||
| 99 | + l->error("after reset, error to stderr\n"); | ||
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | int | 102 | int |