summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/log
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2011-05-27 15:44:23 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2011-05-27 15:44:23 +0000
commit66765100f4257159622cefe57bed50125a5ad017 (patch)
treea88ee23bb194eb91f0ebb2d9b23ff423e3ea8e37 /cpp/src/qpid/log
parent1aeaa7b16e5ce54f10c901d75c4d40f9f88b9db6 (diff)
parent88b98b2f4152ef59a671fad55a0d08338b6b78ca (diff)
downloadqpid-python-rajith_jms_client.tar.gz
Creating a branch for experimenting with some ideas for JMS client.rajith_jms_client
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/rajith_jms_client@1128369 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/log')
-rw-r--r--cpp/src/qpid/log/Helpers.h79
-rw-r--r--cpp/src/qpid/log/Logger.cpp167
-rw-r--r--cpp/src/qpid/log/Options.cpp111
-rw-r--r--cpp/src/qpid/log/OstreamOutput.cpp41
-rw-r--r--cpp/src/qpid/log/OstreamOutput.h41
-rw-r--r--cpp/src/qpid/log/Selector.cpp68
-rw-r--r--cpp/src/qpid/log/Statement.cpp83
-rw-r--r--cpp/src/qpid/log/posix/SinkOptions.cpp215
-rw-r--r--cpp/src/qpid/log/posix/SinkOptions.h64
-rw-r--r--cpp/src/qpid/log/windows/SinkOptions.cpp148
-rw-r--r--cpp/src/qpid/log/windows/SinkOptions.h54
11 files changed, 0 insertions, 1071 deletions
diff --git a/cpp/src/qpid/log/Helpers.h b/cpp/src/qpid/log/Helpers.h
deleted file mode 100644
index 82ef8244be..0000000000
--- a/cpp/src/qpid/log/Helpers.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef QPID_LOG_HELPERS_H
-#define QPID_LOG_HELPERS_H
-
-/*
- * 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 <boost/range.hpp>
-
-#include <ostream>
-
-namespace qpid {
-namespace log {
-
-/** @file Helper classes for logging complex types */
-
-/// @internal
-template <class Range>
-struct ListFormatter {
- typedef typename boost::range_const_iterator<Range>::type Iterator;
- boost::iterator_range<Iterator> range;
- const char* separator;
-
- ListFormatter(const Range& r, const char* s=", ") : range(r), separator(s) {}
-};
-
-/// @internal
-template <class Range>
-std::ostream& operator<<(std::ostream& out, const ListFormatter<Range>& sl) {
- typename ListFormatter<Range>::Iterator i = sl.range.begin();
- if (i != sl.range.end()) out << *(i++);
- while (i != sl.range.end()) out << sl.separator << *(i++);
- return out;
-}
-
-/** Return a formatting object with operator <<
- * to stream range as a separated list.
- *@param range: a range - all standard containers are ranges,
- * as is a pair of iterators.
- *@param separator: printed between elements, default ", "
- */
-template <class Range>
-ListFormatter<Range> formatList(const Range& range, const char* separator=", ") {
- return ListFormatter<Range>(range, separator);
-}
-
-/** Return a formatting object with operator <<
- * to stream the range defined by iterators [begin, end)
- * as a separated list.
- *@param begin, end: Beginning and end of range.
- *@param separator: printed between elements, default ", "
- */
-template <class U, class V>
-ListFormatter<std::pair<U,V> > formatList(U begin, V end, const char* separator=", ") {
- return formatList(std::make_pair(begin,end), separator);
-}
-
-
-}} // namespace qpid::log
-
-
-
-#endif /*!QPID_LOG_HELPERS_H*/
diff --git a/cpp/src/qpid/log/Logger.cpp b/cpp/src/qpid/log/Logger.cpp
deleted file mode 100644
index 1600822142..0000000000
--- a/cpp/src/qpid/log/Logger.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/Logger.h"
-#include "qpid/log/Options.h"
-#include "qpid/log/SinkOptions.h"
-#include "qpid/memory.h"
-#include "qpid/sys/Thread.h"
-#include "qpid/sys/Time.h"
-#include "qpid/DisableExceptionLogging.h"
-#include <boost/pool/detail/singleton.hpp>
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-#include <algorithm>
-#include <sstream>
-#include <iomanip>
-#include <stdexcept>
-#include <time.h>
-
-
-namespace qpid {
-namespace log {
-
-using namespace std;
-
-typedef sys::Mutex::ScopedLock ScopedLock;
-
-inline void Logger::enable_unlocked(Statement* s) {
- s->enabled=selector.isEnabled(s->level, s->function);
-}
-
-Logger& Logger::instance() {
- return boost::details::pool::singleton_default<Logger>::instance();
-}
-
-Logger::Logger() : flags(0) {
- // Disable automatic logging in Exception constructors to avoid
- // re-entrant use of logger singleton if there is an error in
- // option parsing.
- DisableExceptionLogging del;
-
- // Initialize myself from env variables so all programs
- // (e.g. tests) can use logging even if they don't parse
- // command line args.
- Options opts("");
- opts.parse(0, 0);
- configure(opts);
-}
-
-Logger::~Logger() {}
-
-void Logger::select(const Selector& s) {
- ScopedLock l(lock);
- selector=s;
- std::for_each(statements.begin(), statements.end(),
- boost::bind(&Logger::enable_unlocked, this, _1));
-}
-
-Logger::Output::Output() {}
-Logger::Output::~Output() {}
-
-void Logger::log(const Statement& s, const std::string& msg) {
- // Format the message outside the lock.
- std::ostringstream os;
- if (!prefix.empty())
- os << prefix << ": ";
- if (flags&TIME) {
- if (flags&HIRES)
- qpid::sys::outputHiresNow(os);
- else
- qpid::sys::outputFormattedNow(os);
- }
- if (flags&LEVEL)
- os << LevelTraits::name(s.level) << " ";
- if (flags&THREAD)
- os << "[0x" << hex << qpid::sys::Thread::logId() << "] ";
- if (flags&FILE)
- os << s.file << ":";
- if (flags&LINE)
- os << dec << s.line << ":";
- if (flags&FUNCTION)
- os << s.function << ":";
- if (flags & (FILE|LINE|FUNCTION))
- os << " ";
- os << msg << endl;
- std::string formatted=os.str();
- {
- ScopedLock l(lock);
- std::for_each(outputs.begin(), outputs.end(),
- boost::bind(&Output::log, _1, s, formatted));
- }
-}
-
-void Logger::output(std::auto_ptr<Output> out) {
- ScopedLock l(lock);
- outputs.push_back(out.release());
-}
-
-void Logger::clear() {
- select(Selector()); // locked
- format(0); // locked
- ScopedLock l(lock);
- outputs.clear();
-}
-
-void Logger::format(int formatFlags) {
- ScopedLock l(lock);
- flags=formatFlags;
-}
-
-static int bitIf(bool test, int bit) {
- return test ? bit : 0;
-}
-
-int Logger::format(const Options& opts) {
- int flags=
- bitIf(opts.level, LEVEL) |
- bitIf(opts.time, TIME) |
- bitIf(opts.source, (FILE|LINE)) |
- bitIf(opts.function, FUNCTION) |
- bitIf(opts.thread, THREAD) |
- bitIf(opts.hiresTs, HIRES);
- format(flags);
- return flags;
-}
-
-void Logger::add(Statement& s) {
- ScopedLock l(lock);
- enable_unlocked(&s);
- statements.insert(&s);
-}
-
-void Logger::configure(const Options& opts) {
- options = opts;
- clear();
- Options o(opts);
- if (o.trace)
- o.selectors.push_back("trace+");
- format(o);
- select(Selector(o));
- setPrefix(opts.prefix);
- options.sinkOptions->setup(this);
-}
-
-void Logger::reconfigure(const std::vector<std::string>& selectors) {
- options.selectors = selectors;
- select(Selector(options));
-}
-
-void Logger::setPrefix(const std::string& p) { prefix = p; }
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/Options.cpp b/cpp/src/qpid/log/Options.cpp
deleted file mode 100644
index 0001d00bdf..0000000000
--- a/cpp/src/qpid/log/Options.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/Options.h"
-#include "qpid/log/SinkOptions.h"
-#include "qpid/log/Statement.h"
-#include "qpid/Options.h"
-#include <map>
-#include <string>
-#include <algorithm>
-
-namespace qpid {
-namespace log {
-
-using namespace std;
-
-Options::Options(const std::string& argv0_, const std::string& name_) :
- qpid::Options(name_),
- argv0(argv0_),
- name(name_),
- time(true),
- level(true),
- thread(false),
- source(false),
- function(false),
- hiresTs(false),
- trace(false),
- sinkOptions (SinkOptions::create(argv0_))
-{
- selectors.push_back("notice+");
-
- ostringstream levels;
- levels << LevelTraits::name(Level(0));
- for (int i = 1; i < LevelTraits::COUNT; ++i)
- levels << " " << LevelTraits::name(Level(i));
-
- addOptions()
- ("trace,t", optValue(trace), "Enables all logging" )
- ("log-enable", optValue(selectors, "RULE"),
- ("Enables logging for selected levels and components. "
- "RULE is in the form 'LEVEL[+][:PATTERN]' "
- "Levels are one of: \n\t "+levels.str()+"\n"
- "For example:\n"
- "\t'--log-enable warning+' "
- "logs all warning, error and critical messages.\n"
- "\t'--log-enable debug:framing' "
- "logs debug messages from the framing namespace. "
- "This option can be used multiple times").c_str())
- ("log-time", optValue(time, "yes|no"), "Include time in log messages")
- ("log-level", optValue(level,"yes|no"), "Include severity level in log messages")
- ("log-source", optValue(source,"yes|no"), "Include source file:line in log messages")
- ("log-thread", optValue(thread,"yes|no"), "Include thread ID in log messages")
- ("log-function", optValue(function,"yes|no"), "Include function signature in log messages")
- ("log-hires-timestamp", optValue(hiresTs,"yes|no"), "Use unformatted hi-res timestamp in log messages")
- ("log-prefix", optValue(prefix,"STRING"), "Prefix to append to all log messages")
- ;
- add(*sinkOptions);
-}
-
-Options::Options(const Options &o) :
- qpid::Options(o.name),
- argv0(o.argv0),
- name(o.name),
- selectors(o.selectors),
- time(o.time),
- level(o.level),
- thread(o.thread),
- source(o.source),
- function(o.function),
- hiresTs(o.hiresTs),
- trace(o.trace),
- prefix(o.prefix),
- sinkOptions (SinkOptions::create(o.argv0))
-{
- *sinkOptions = *o.sinkOptions;
-}
-
-Options& Options::operator=(const Options& x) {
- if (this != &x) {
- argv0 = x.argv0;
- name = x.name;
- selectors = x.selectors;
- time = x.time;
- level= x.level;
- thread = x.thread;
- source = x.source;
- function = x.function;
- hiresTs = x.hiresTs;
- trace = x.trace;
- prefix = x.prefix;
- *sinkOptions = *x.sinkOptions;
- }
- return *this;
-}
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/OstreamOutput.cpp b/cpp/src/qpid/log/OstreamOutput.cpp
deleted file mode 100644
index 9b6ec1f8aa..0000000000
--- a/cpp/src/qpid/log/OstreamOutput.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/OstreamOutput.h"
-#include <stdexcept>
-
-using namespace std;
-
-namespace qpid {
-namespace log {
-
-OstreamOutput::OstreamOutput(std::ostream& o) : out(&o) {}
-
-OstreamOutput::OstreamOutput(const std::string& file)
- : out(new ofstream(file.c_str(), ios_base::out | ios_base::app)),
- mine(out)
-{
- if (!out->good())
- throw std::runtime_error("Can't open log file: "+file);
-}
-
-void OstreamOutput::log(const Statement&, const std::string& m) {
- *out << m << flush;
-}
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/OstreamOutput.h b/cpp/src/qpid/log/OstreamOutput.h
deleted file mode 100644
index 12fd4ce425..0000000000
--- a/cpp/src/qpid/log/OstreamOutput.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef QPID_LOG_OSTREAMOUTPUT_H
-#define QPID_LOG_OSTREAMOUTPUT_H
-
-/*
- * 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/log/Logger.h"
-#include <boost/scoped_ptr.hpp>
-#include <fstream>
-#include <ostream>
-
-namespace qpid {
-namespace log {
-
-/**
- * OstreamOutput is a reusable logging sink that directs logging to a C++
- * ostream.
- */
-class OstreamOutput : public qpid::log::Logger::Output {
-public:
- QPID_COMMON_EXTERN OstreamOutput(std::ostream& o);
- QPID_COMMON_EXTERN OstreamOutput(const std::string& file);
-
- virtual void log(const Statement&, const std::string& m);
-
-private:
- std::ostream* out;
- boost::scoped_ptr<std::ostream> mine;
-};
-
-}} // namespace qpid::log
-
-#endif /*!QPID_LOG_OSTREAMOUTPUT_H*/
diff --git a/cpp/src/qpid/log/Selector.cpp b/cpp/src/qpid/log/Selector.cpp
deleted file mode 100644
index a4bc580470..0000000000
--- a/cpp/src/qpid/log/Selector.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/Selector.h"
-#include "qpid/log/Options.h"
-#include <boost/bind.hpp>
-#include <algorithm>
-#include <string.h>
-
-namespace qpid {
-namespace log {
-
-using namespace std;
-
-void Selector::enable(const string& enableStr) {
- string level, pattern;
- size_t c=enableStr.find(':');
- if (c==string::npos) {
- level=enableStr;
- }
- else {
- level=enableStr.substr(0,c);
- pattern=enableStr.substr(c+1);
- }
- if (!level.empty() && level[level.size()-1]=='+') {
- for (int i = LevelTraits::level(level.substr(0,level.size()-1));
- i < LevelTraits::COUNT;
- ++i)
- enable(Level(i), pattern);
- }
- else {
- enable(LevelTraits::level(level), pattern);
- }
-}
-
-Selector::Selector(const Options& opt){
- for_each(opt.selectors.begin(), opt.selectors.end(),
- boost::bind(&Selector::enable, this, _1));
-}
-
-bool Selector::isEnabled(Level level, const char* function) {
- const char* functionEnd = function+::strlen(function);
- for (std::vector<std::string>::iterator i=substrings[level].begin();
- i != substrings[level].end();
- ++i)
- {
- if (std::search(function, functionEnd, i->begin(), i->end()) != functionEnd)
- return true;
- }
- return false;
-}
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/Statement.cpp b/cpp/src/qpid/log/Statement.cpp
deleted file mode 100644
index 6a32b50096..0000000000
--- a/cpp/src/qpid/log/Statement.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/Statement.h"
-#include "qpid/log/Logger.h"
-#include <boost/bind.hpp>
-#include <stdexcept>
-#include <algorithm>
-#include <ctype.h>
-
-namespace qpid {
-namespace log {
-
-namespace {
-using namespace std;
-
-struct NonPrint { bool operator()(unsigned char c) { return !isprint(c) && !isspace(c); } };
-
-const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
-std::string quote(const std::string& str) {
- NonPrint nonPrint;
- size_t n = std::count_if(str.begin(), str.end(), nonPrint);
- if (n==0) return str;
- std::string ret;
- ret.reserve(str.size()+2*n); // Avoid extra allocations.
- for (string::const_iterator i = str.begin(); i != str.end(); ++i) {
- if (nonPrint(*i)) {
- ret.push_back('\\');
- ret.push_back('x');
- ret.push_back(hex[((*i) >> 4)&0xf]);
- ret.push_back(hex[(*i) & 0xf]);
- }
- else ret.push_back(*i);
- }
- return ret;
-}
-
-}
-
-void Statement::log(const std::string& message) {
- Logger::instance().log(*this, quote(message));
-}
-
-Statement::Initializer::Initializer(Statement& s) : statement(s) {
- Logger::instance().add(s);
-}
-
-namespace {
-const char* names[LevelTraits::COUNT] = {
- "trace", "debug", "info", "notice", "warning", "error", "critical"
-};
-
-} // namespace
-
-Level LevelTraits::level(const char* name) {
- for (int i =0; i < LevelTraits::COUNT; ++i) {
- if (strcmp(names[i], name)==0)
- return Level(i);
- }
- throw std::runtime_error(std::string("Invalid log level name: ")+name);
-}
-
-const char* LevelTraits::name(Level l) {
- return names[l];
-}
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/posix/SinkOptions.cpp b/cpp/src/qpid/log/posix/SinkOptions.cpp
deleted file mode 100644
index 292e9147f6..0000000000
--- a/cpp/src/qpid/log/posix/SinkOptions.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/posix/SinkOptions.h"
-#include "qpid/log/SinkOptions.h"
-#include "qpid/log/Logger.h"
-#include "qpid/log/OstreamOutput.h"
-#include "qpid/memory.h"
-#include "qpid/Exception.h"
-#include <iostream>
-#include <map>
-#include <string>
-#include <syslog.h>
-
-using std::string;
-using qpid::Exception;
-
-namespace {
-
-// SyslogFacilities maps from syslog values to the text equivalents.
-class SyslogFacilities {
-public:
- typedef std::map<string, int> ByName;
- typedef std::map<int, string> ByValue;
-
- SyslogFacilities() {
- struct NameValue { const char* name; int value; };
- NameValue nameValue[] = {
- { "AUTH", LOG_AUTH },
-#ifdef HAVE_LOG_AUTHPRIV
- { "AUTHPRIV", LOG_AUTHPRIV },
-#endif
- { "CRON", LOG_CRON },
- { "DAEMON", LOG_DAEMON },
-#ifdef HAVE_LOG_FTP
- { "FTP", LOG_FTP },
-#endif
- { "KERN", LOG_KERN },
- { "LOCAL0", LOG_LOCAL0 },
- { "LOCAL1", LOG_LOCAL1 },
- { "LOCAL2", LOG_LOCAL2 },
- { "LOCAL3", LOG_LOCAL3 },
- { "LOCAL4", LOG_LOCAL4 },
- { "LOCAL5", LOG_LOCAL5 },
- { "LOCAL6", LOG_LOCAL6 },
- { "LOCAL7", LOG_LOCAL7 },
- { "LPR", LOG_LPR },
- { "MAIL", LOG_MAIL },
- { "NEWS", LOG_NEWS },
- { "SYSLOG", LOG_SYSLOG },
- { "USER", LOG_USER },
- { "UUCP", LOG_UUCP }
- };
- for (size_t i = 0; i < sizeof(nameValue)/sizeof(nameValue[0]); ++i) {
- byName.insert(ByName::value_type(nameValue[i].name, nameValue[i].value));
- // Recognise with and without LOG_ prefix e.g.: AUTH and LOG_AUTH
- byName.insert(ByName::value_type(string("LOG_")+nameValue[i].name, nameValue[i].value));
- byValue.insert(ByValue::value_type(nameValue[i].value, string("LOG_")+nameValue[i].name));
- }
- }
-
- int value(const string& name) const {
- string key(name);
- std::transform(key.begin(), key.end(), key.begin(), ::toupper);
- ByName::const_iterator i = byName.find(key);
- if (i == byName.end())
- throw Exception("Not a valid syslog facility: " + name);
- return i->second;
- }
-
- string name(int value) const {
- ByValue::const_iterator i = byValue.find(value);
- if (i == byValue.end())
- throw Exception("Not a valid syslog value: " + value);
- return i->second;
- }
-
- private:
- ByName byName;
- ByValue byValue;
-};
-
-// 'priorities' maps qpid log levels to syslog priorities. They are in
-// order of qpid log levels and must map to:
-// "trace", "debug", "info", "notice", "warning", "error", "critical"
-static int priorities[qpid::log::LevelTraits::COUNT] = {
- LOG_DEBUG, LOG_DEBUG, LOG_INFO, LOG_NOTICE,
- LOG_WARNING, LOG_ERR, LOG_CRIT
-};
-
-std::string basename(const std::string path) {
- size_t i = path.find_last_of('/');
- return path.substr((i == std::string::npos) ? 0 : i+1);
-}
-
-} // namespace
-
-namespace qpid {
-namespace log {
-namespace posix {
-
-std::ostream& operator<<(std::ostream& o, const SyslogFacility& f) {
- return o << SyslogFacilities().name(f.value);
-}
-
-std::istream& operator>>(std::istream& i, SyslogFacility& f) {
- std::string name;
- i >> name;
- f.value = SyslogFacilities().value(name);
- return i;
-}
-
-class SyslogOutput : public qpid::log::Logger::Output {
-public:
- SyslogOutput(const std::string& logName, const SyslogFacility& logFacility)
- : name(logName), facility(logFacility.value)
- {
- ::openlog(name.c_str(), LOG_PID, facility);
- }
-
- virtual ~SyslogOutput() {
- ::closelog();
- }
-
- virtual void log(const Statement& s, const std::string& m)
- {
- syslog(priorities[s.level], "%s", m.c_str());
- }
-
-private:
- std::string name;
- int facility;
-};
-
-SinkOptions::SinkOptions(const std::string& argv0)
- : qpid::log::SinkOptions(),
- logToStderr(true),
- logToStdout(false),
- logToSyslog(false),
- syslogName(basename(argv0)),
- syslogFacility(LOG_DAEMON) {
-
- addOptions()
- ("log-to-stderr", optValue(logToStderr, "yes|no"), "Send logging output to stderr")
- ("log-to-stdout", optValue(logToStdout, "yes|no"), "Send logging output to stdout")
- ("log-to-file", optValue(logFile, "FILE"), "Send log output to FILE.")
- ("log-to-syslog", optValue(logToSyslog, "yes|no"), "Send logging output to syslog;\n\tcustomize using --syslog-name and --syslog-facility")
- ("syslog-name", optValue(syslogName, "NAME"), "Name to use in syslog messages")
- ("syslog-facility", optValue(syslogFacility,"LOG_XXX"), "Facility to use in syslog messages")
- ;
-
-}
-
-qpid::log::SinkOptions& SinkOptions::operator=(const qpid::log::SinkOptions& rhs) {
- const SinkOptions *prhs = dynamic_cast<const SinkOptions*>(&rhs);
- if (this != prhs) {
- logToStderr = prhs->logToStderr;
- logToStdout = prhs->logToStdout;
- logToSyslog = prhs->logToSyslog;
- logFile = prhs->logFile;
- syslogName = prhs->syslogName;
- syslogFacility.value = prhs->syslogFacility.value;
- }
- return *this;
-}
-
-void SinkOptions::detached(void) {
- if (logToStderr && !logToStdout && !logToSyslog) {
- logToStderr = false;
- logToSyslog = true;
- }
-}
-
-// The Logger acting on these options calls setup() to request any
-// Sinks be set up and fed back to the logger.
-void SinkOptions::setup(qpid::log::Logger *logger) {
- if (logToStderr)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(std::clog)));
- if (logToStdout)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(std::cout)));
-
- if (logFile.length() > 0)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(logFile)));
-
- if (logToSyslog)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new SyslogOutput(syslogName, syslogFacility)));
-
-}
-
-} // namespace qpid::log::posix
-
-SinkOptions* SinkOptions::create(const std::string& argv0) {
- return new qpid::log::posix::SinkOptions (argv0);
-}
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/posix/SinkOptions.h b/cpp/src/qpid/log/posix/SinkOptions.h
deleted file mode 100644
index d929c29025..0000000000
--- a/cpp/src/qpid/log/posix/SinkOptions.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef QPID_LOG_POSIX_SINKOPTIONS_H
-#define QPID_LOG_POSIX_SINKOPTIONS_H
-
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/SinkOptions.h"
-#include <string>
-
-namespace qpid {
-namespace log {
-namespace posix {
-
-/**
- * Provides a type that can be passed to << and >> operators to convert
- * syslog facility values to/from strings.
- */
-struct SyslogFacility {
- int value;
- SyslogFacility(int i=0) : value(i) {}
-};
-
-struct SinkOptions : public qpid::log::SinkOptions {
- SinkOptions(const std::string& argv0);
- virtual ~SinkOptions() {}
-
- virtual qpid::log::SinkOptions& operator=(const qpid::log::SinkOptions& rhs);
-
- // This allows the caller to indicate that there's no normal outputs
- // available. For example, when running as a daemon. In these cases, the
- // platform's "syslog"-type output should replace the default stderr
- // unless some other sink has been selected.
- virtual void detached(void);
-
- // The Logger acting on these options calls setup() to request any
- // Sinks be set up and fed back to the logger.
- virtual void setup(qpid::log::Logger *logger);
-
- bool logToStderr;
- bool logToStdout;
- bool logToSyslog;
- std::string logFile;
- std::string syslogName;
- SyslogFacility syslogFacility;
-};
-
-}}} // namespace qpid::log::posix
-
-#endif /*!QPID_LOG_POSIX_SINKOPTIONS_H*/
diff --git a/cpp/src/qpid/log/windows/SinkOptions.cpp b/cpp/src/qpid/log/windows/SinkOptions.cpp
deleted file mode 100644
index 0c74bea64e..0000000000
--- a/cpp/src/qpid/log/windows/SinkOptions.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/windows/SinkOptions.h"
-#include "qpid/log/SinkOptions.h"
-#include "qpid/log/Logger.h"
-#include "qpid/log/OstreamOutput.h"
-#include "qpid/memory.h"
-#include "qpid/Exception.h"
-#include <iostream>
-#include <map>
-#include <string>
-
-#include <windows.h>
-
-using qpid::Exception;
-
-namespace qpid {
-namespace log {
-namespace windows {
-
-namespace {
-
-// 'eventTypes' maps qpid log levels to Windows event types. They are in
-// order of qpid log levels and must map to:
-// "trace", "debug", "info", "notice", "warning", "error", "critical"
-static int eventTypes[qpid::log::LevelTraits::COUNT] = {
- EVENTLOG_INFORMATION_TYPE, /* trace */
- EVENTLOG_INFORMATION_TYPE, /* debug */
- EVENTLOG_INFORMATION_TYPE, /* info */
- EVENTLOG_INFORMATION_TYPE, /* notice */
- EVENTLOG_WARNING_TYPE, /* warning */
- EVENTLOG_ERROR_TYPE, /* error */
- EVENTLOG_ERROR_TYPE /* critical */
-};
-
-} // namespace
-
-class EventLogOutput : public qpid::log::Logger::Output {
-public:
- EventLogOutput(const std::string& /*sourceName*/) : logHandle(0)
- {
- logHandle = OpenEventLog(0, "Application");
- }
-
- virtual ~EventLogOutput() {
- if (logHandle)
- CloseEventLog(logHandle);
- }
-
- virtual void log(const Statement& s, const std::string& m)
- {
- if (logHandle) {
- const char *msg = m.c_str();
- ReportEvent(logHandle,
- eventTypes[s.level],
- 0, /* category unused */
- 0, /* event id */
- 0, /* user security id */
- 1, /* number of strings */
- 0, /* no event-specific data */
- &msg,
- 0);
- }
- }
-
-private:
- HANDLE logHandle;
-};
-
-SinkOptions::SinkOptions(const std::string& /*argv0*/)
- : qpid::log::SinkOptions(),
- logToStderr(true),
- logToStdout(false),
- logToEventLog(false),
- eventSource("Application")
-{
- addOptions()
- ("log-to-stderr", optValue(logToStderr, "yes|no"), "Send logging output to stderr")
- ("log-to-stdout", optValue(logToStdout, "yes|no"), "Send logging output to stdout")
- ("log-to-file", optValue(logFile, "FILE"), "Send log output to FILE.")
- ("log-to-eventlog", optValue(logToEventLog, "yes|no"), "Send logging output to event log;\n\tcustomize using --syslog-name and --syslog-facility")
- ("eventlog-source-name", optValue(eventSource, "Application"), "Event source to log to")
- ;
-
-}
-
-qpid::log::SinkOptions& SinkOptions::operator=(const qpid::log::SinkOptions& rhs) {
- const SinkOptions *prhs = dynamic_cast<const SinkOptions*>(&rhs);
- if (this != prhs) {
- logToStderr = prhs->logToStderr;
- logToStdout = prhs->logToStdout;
- logToEventLog = prhs->logToEventLog;
- eventSource = prhs->eventSource;
- logFile = prhs->logFile;
- }
- return *this;
-}
-
-void SinkOptions::detached(void) {
- if (logToStderr && !logToStdout && !logToEventLog) {
- logToStderr = false;
- logToEventLog = true;
- }
-}
-
-// The Logger acting on these options calls setup() to request any
-// Sinks be set up and fed back to the logger.
-void SinkOptions::setup(qpid::log::Logger *logger) {
- if (logToStderr)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(std::clog)));
- if (logToStdout)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(std::cout)));
-
- if (logFile.length() > 0)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new qpid::log::OstreamOutput(logFile)));
-
- if (logToEventLog)
- logger->output(make_auto_ptr<qpid::log::Logger::Output>
- (new EventLogOutput(eventSource)));
-
-}
-
-} // namespace windows
-
-SinkOptions* SinkOptions::create(const std::string& argv0) {
- return new qpid::log::windows::SinkOptions (argv0);
-}
-
-}} // namespace qpid::log
diff --git a/cpp/src/qpid/log/windows/SinkOptions.h b/cpp/src/qpid/log/windows/SinkOptions.h
deleted file mode 100644
index f270c504a2..0000000000
--- a/cpp/src/qpid/log/windows/SinkOptions.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef QPID_LOG_WINDOWS_SINKOPTIONS_H
-#define QPID_LOG_WINDOWS_SINKOPTIONS_H
-
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed 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/log/SinkOptions.h"
-#include <string>
-
-namespace qpid {
-namespace log {
-namespace windows {
-
-struct QPID_COMMON_CLASS_EXTERN SinkOptions : public qpid::log::SinkOptions {
- QPID_COMMON_EXTERN SinkOptions(const std::string& argv0);
- virtual ~SinkOptions() {}
-
- QPID_COMMON_EXTERN virtual qpid::log::SinkOptions& operator=(const qpid::log::SinkOptions& rhs);
-
- // This allows the caller to indicate that there's no normal outputs
- // available. For example, when running as a service. In these cases, the
- // platform's "syslog"-type output should replace the default stderr
- // unless some other sink has been selected.
- QPID_COMMON_EXTERN virtual void detached(void);
-
- // The Logger acting on these options calls setup() to request any
- // Sinks be set up and fed back to the logger.
- QPID_COMMON_EXTERN virtual void setup(qpid::log::Logger *logger);
-
- bool logToStderr;
- bool logToStdout;
- bool logToEventLog;
- std::string eventSource;
- std::string logFile;
-};
-
-}}} // namespace qpid::log::windows
-
-#endif /*!QPID_LOG_WINDOWS_SINKOPTIONS_H*/