2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 08:20:53 +00:00

Make QPDFLogger() private and provide create method

This commit is contained in:
Jay Berkenbilt 2022-09-09 07:03:29 -04:00
parent 7049588bff
commit 0ad4e190ff
5 changed files with 39 additions and 32 deletions

View File

@ -31,7 +31,7 @@ class QPDFLogger
{ {
public: public:
QPDF_DLL QPDF_DLL
QPDFLogger(); static std::shared_ptr<QPDFLogger> create();
// Return the default logger. In general, you should use the // Return the default logger. In general, you should use the
// default logger. You can also create your own loggers and use // default logger. You can also create your own loggers and use
@ -152,6 +152,7 @@ class QPDFLogger
void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream); void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream);
private: private:
QPDFLogger();
std::shared_ptr<Pipeline> std::shared_ptr<Pipeline>
throwIfNull(std::shared_ptr<Pipeline>, bool null_okay); throwIfNull(std::shared_ptr<Pipeline>, bool null_okay);

View File

@ -362,7 +362,7 @@ QPDF::setLogger(std::shared_ptr<QPDFLogger> l)
void void
QPDF::setOutputStreams(std::ostream* out, std::ostream* err) QPDF::setOutputStreams(std::ostream* out, std::ostream* err)
{ {
setLogger(std::make_shared<QPDFLogger>()); setLogger(QPDFLogger::create());
this->m->log->setOutputStreams(out, err); this->m->log->setOutputStreams(out, err);
} }

View File

@ -460,7 +460,7 @@ QPDFJob::setLogger(std::shared_ptr<QPDFLogger> l)
void void
QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err) QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err)
{ {
setLogger(std::make_shared<QPDFLogger>()); setLogger(QPDFLogger::create());
this->m->log->setOutputStreams(out, err); this->m->log->setOutputStreams(out, err);
} }

View File

@ -64,10 +64,16 @@ QPDFLogger::QPDFLogger() :
{ {
} }
std::shared_ptr<QPDFLogger>
QPDFLogger::create()
{
return std::shared_ptr<QPDFLogger>(new QPDFLogger);
}
std::shared_ptr<QPDFLogger> std::shared_ptr<QPDFLogger>
QPDFLogger::defaultLogger() QPDFLogger::defaultLogger()
{ {
static auto l = std::make_shared<QPDFLogger>(); static auto l = create();
return l; return l;
} }

View File

@ -39,64 +39,64 @@ test2()
{ {
// First call saveToStandardOutput. Then use info, which then to // First call saveToStandardOutput. Then use info, which then to
// go stderr. // go stderr.
QPDFLogger l; auto l = QPDFLogger::create();
l.saveToStandardOutput(true); l->saveToStandardOutput(true);
l.info(std::string("info to stderr\n")); l->info(std::string("info to stderr\n"));
*(l.getSave()) << "save to stdout\n"; *(l->getSave()) << "save to stdout\n";
l.setInfo(nullptr); l->setInfo(nullptr);
l.info("info still to stderr\n"); l->info("info still to stderr\n");
l.setSave(nullptr, false); l->setSave(nullptr, false);
l.setInfo(nullptr); l->setInfo(nullptr);
l.info("info back to stdout\n"); l->info("info back to stdout\n");
} }
static void static void
test3() test3()
{ {
// Error/warning // Error/warning
QPDFLogger l; auto l = QPDFLogger::create();
// Warning follows error when error is set explicitly. // Warning follows error when error is set explicitly.
std::string errors; std::string errors;
auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors); auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors);
l.setError(pl_error); l->setError(pl_error);
l.warn("warn follows error\n"); l->warn("warn follows error\n");
assert(errors == "warn follows error\n"); assert(errors == "warn follows error\n");
l.error("error too\n"); l->error("error too\n");
assert(errors == "warn follows error\nerror too\n"); assert(errors == "warn follows error\nerror too\n");
// Set warnings -- now they're separate // Set warnings -- now they're separate
std::string warnings; std::string warnings;
auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings); auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings);
l.setWarn(pl_warn); l->setWarn(pl_warn);
l.warn(std::string("warning now separate\n")); l->warn(std::string("warning now separate\n"));
l.error(std::string("new error\n")); l->error(std::string("new error\n"));
assert(warnings == "warning now separate\n"); assert(warnings == "warning now separate\n");
assert(errors == "warn follows error\nerror too\nnew error\n"); assert(errors == "warn follows error\nerror too\nnew error\n");
std::string errors2; std::string errors2;
pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2); pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2);
l.setError(pl_error); l->setError(pl_error);
l.warn("new warning\n"); l->warn("new warning\n");
l.error("another new error\n"); l->error("another new error\n");
assert(warnings == "warning now separate\nnew warning\n"); assert(warnings == "warning now separate\nnew warning\n");
assert(errors == "warn follows error\nerror too\nnew error\n"); assert(errors == "warn follows error\nerror too\nnew error\n");
assert(errors2 == "another new error\n"); assert(errors2 == "another new error\n");
// Restore warnings to default -- follows error again // Restore warnings to default -- follows error again
l.setWarn(nullptr); l->setWarn(nullptr);
l.warn("warning 3\n"); l->warn("warning 3\n");
l.error("error 3\n"); l->error("error 3\n");
assert(warnings == "warning now separate\nnew warning\n"); assert(warnings == "warning now separate\nnew warning\n");
assert(errors == "warn follows error\nerror too\nnew error\n"); assert(errors == "warn follows error\nerror too\nnew error\n");
assert(errors2 == "another new error\nwarning 3\nerror 3\n"); assert(errors2 == "another new error\nwarning 3\nerror 3\n");
// Restore everything to default // Restore everything to default
l.setInfo(nullptr); l->setInfo(nullptr);
l.setWarn(nullptr); l->setWarn(nullptr);
l.setError(nullptr); l->setError(nullptr);
l.info("after reset, info to stdout\n"); l->info("after reset, info to stdout\n");
l.warn("after reset, warn to stderr\n"); l->warn("after reset, warn to stderr\n");
l.error("after reset, error to stderr\n"); l->error("after reset, error to stderr\n");
} }
int int