summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qpid/messaging/Logger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src/qpid/messaging/Logger.cpp')
-rw-r--r--qpid/cpp/src/qpid/messaging/Logger.cpp200
1 files changed, 0 insertions, 200 deletions
diff --git a/qpid/cpp/src/qpid/messaging/Logger.cpp b/qpid/cpp/src/qpid/messaging/Logger.cpp
deleted file mode 100644
index c259cb4c1b..0000000000
--- a/qpid/cpp/src/qpid/messaging/Logger.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-#include "qpid/messaging/Logger.h"
-
-#include "qpid/log/Logger.h"
-#include "qpid/log/OstreamOutput.h"
-#include "qpid/messaging/exceptions.h"
-
-#include <sstream>
-#include <string>
-#include <vector>
-
-using std::string;
-using std::vector;
-
-namespace qpid {
-namespace messaging {
-
-// Proxy class to call the users output class/routine
-class ProxyOutput : public qpid::log::Logger::Output {
- LoggerOutput& output;
-
- void log(const qpid::log::Statement& s, const string& message) {
- output.log(qpid::messaging::Level(s.level), s.category==qpid::log::external_application, s.file, s.line, s.function, message);
- }
-
-public:
- ProxyOutput(LoggerOutput& o) :
- output(o)
- {}
-};
-
-LoggerOutput::~LoggerOutput()
-{
-}
-
-inline qpid::log::Logger& logger() {
- static qpid::log::Logger& theLogger=qpid::log::Logger::instance();
- return theLogger;
-}
-
-namespace {
- std::string loggerUsage;
- qpid::log::Selector loggerSelector;
-}
-
-std::string Logger::usage()
-{
- return loggerUsage;
-}
-
-void Logger::configure(int argc, const char* argv[], const string& pre)
-try
-{
- bool logToStdout = false;
- bool logToStderr = false;
- string logFile;
- std::vector<std::string> selectors;
- std::vector<std::string> deselectors;
- bool time = false;
- bool level = false;
- bool thread = false;
- bool source = false;
- bool function = false;
- bool hiresTs = false;
-
- selectors.push_back("notice+"); // Set this for the usage message default
-
- string prefix = pre.empty() ? pre : pre+"-";
- qpid::Options myOptions;
- myOptions.addOptions()
- ((prefix+"log-enable").c_str(), optValue(selectors, "RULE"),
- ("Enables logging for selected levels and components. "
- "RULE is in the form 'LEVEL[+-][:PATTERN]'\n"
- "LEVEL is one of: \n\t "+qpid::log::getLevels()+"\n"
- "PATTERN is a logging category name, or a namespace-qualified "
- "function name or name fragment. "
- "Logging category names are: \n\t "+qpid::log::getCategories()+"\n"
- "The category \"Application\" contains all messages logged by the application.\n"
- "For example:\n"
- "\t'--log-enable warning+'\n"
- "logs all warning, error and critical messages.\n"
- "\t'--log-enable trace+:Application --log-enable notice+'\n"
- "logs all application messages, but only notice or higher for the qpid library messages\n"
- "\t'--log-enable debug:framing'\n"
- "logs debug messages from all functions with 'framing' in the namespace or function name.\n"
- "This option can be used multiple times").c_str())
- ((prefix+"log-disable").c_str(), optValue(deselectors, "RULE"),
- ("Disables logging for selected levels and components. "
- "RULE is in the form 'LEVEL[+-][:PATTERN]'\n"
- "LEVEL is one of: \n\t "+qpid::log::getLevels()+"\n"
- "PATTERN is a logging category name, or a namespace-qualified "
- "function name or name fragment. "
- "Logging category names are: \n\t "+qpid::log::getCategories()+"\n"
- "For example:\n"
- "\t'--log-disable warning-'\n"
- "disables logging all warning, notice, info, debug, and trace messages.\n"
- "\t'--log-disable trace:Application'\n"
- "disables all application trace messages.\n"
- "\t'--log-disable debug-:qmf::'\n"
- "disables logging debug and trace messages from all functions with 'qmf::' in the namespace.\n"
- "This option can be used multiple times").c_str())
- ((prefix+"log-time").c_str(), optValue(time, "yes|no"), "Include time in log messages")
- ((prefix+"log-level").c_str(), optValue(level,"yes|no"), "Include severity level in log messages")
- ((prefix+"log-source").c_str(), optValue(source,"yes|no"), "Include source file:line in log messages")
- ((prefix+"log-thread").c_str(), optValue(thread,"yes|no"), "Include thread ID in log messages")
- ((prefix+"log-function").c_str(), optValue(function,"yes|no"), "Include function signature in log messages")
- ((prefix+"log-hires-timestamp").c_str(), optValue(hiresTs,"yes|no"), "Use hi-resolution timestamps in log messages")
- ((prefix+"log-to-stderr").c_str(), optValue(logToStderr, "yes|no"), "Send logging output to stderr")
- ((prefix+"log-to-stdout").c_str(), optValue(logToStdout, "yes|no"), "Send logging output to stdout")
- ((prefix+"log-to-file").c_str(), optValue(logFile, "FILE"), "Send log output to FILE.")
- ;
-
- std::ostringstream loggerSStream;
- myOptions.print(loggerSStream);
-
- loggerUsage=loggerSStream.str();
-
- selectors.clear(); // Clear to give passed in options precedence
-
- // Parse the command line not failing for unrecognised options
- myOptions.parse(argc, argv, std::string(), true);
-
- // If no passed in enable or disable log specification then go back to default
- if (selectors.empty() && deselectors.empty())
- selectors.push_back("notice+");
- // Set the logger options according to what we just parsed
- qpid::log::Options logOptions;
- logOptions.selectors = selectors;
- logOptions.deselectors = deselectors;
- logOptions.time = time;
- logOptions.level = level;
- logOptions.category = false;
- logOptions.thread = thread;
- logOptions.source = source;
- logOptions.function = function;
- logOptions.hiresTs = hiresTs;
-
- loggerSelector = qpid::log::Selector(logOptions);
- logger().clear(); // Need to clear before configuring as it will have been initialised statically already
- logger().format(logOptions);
- logger().select(loggerSelector);
-
- // Have to set up the standard output sinks manually
- if (logToStderr)
- logger().output(std::auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(std::clog)));
- if (logToStdout)
- logger().output(std::auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(std::cout)));
-
- if (logFile.length() > 0)
- logger().output(std::auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(logFile)));
-}
-catch (std::exception& e)
-{
- throw MessagingException(e.what());
-}
-
-void Logger::setOutput(LoggerOutput& o)
-{
- logger().output(std::auto_ptr<qpid::log::Logger::Output>(new ProxyOutput(o)));
-}
-
-void Logger::log(Level level, const char* file, int line, const char* function, const string& message)
-{
- if (loggerSelector.isEnabled(qpid::log::Level(level), function, qpid::log::unspecified)) {
- qpid::log::Statement s = {
- true,
- file,
- line,
- function,
- qpid::log::Level(level),
- qpid::log::external_application,
- };
- logger().log(s, message);
- }
-}
-
-}} // namespace qpid::messaging