Skip to content
Snippets Groups Projects
Commit d30a92af authored by g0dil's avatar g0dil
Browse files

Utils/Logger: Change FileTarget default console node name to file basename

Utils/Logger: Add optional console node name argument to FileTarget constructor
Utils/Logger: Add 'file' console command to FileTarget returning the target filename
Utils/Logger: Change 'list' console command output to be more readable/consistent
parent 556a682d
No related branches found
No related tags found
No related merge requests found
...@@ -340,10 +340,10 @@ senf::console::Executor::traverseDirectory(ParseCommandInfo::TokensRange const & ...@@ -340,10 +340,10 @@ senf::console::Executor::traverseDirectory(ParseCommandInfo::TokensRange const &
} }
} }
catch (std::bad_cast &) { catch (std::bad_cast &) {
throw InvalidDirectoryException(); throw InvalidDirectoryException(errorPath);
} }
catch (UnknownNodeNameException &) { catch (UnknownNodeNameException &) {
throw InvalidDirectoryException(); throw InvalidDirectoryException(errorPath);
} }
} }
......
...@@ -261,7 +261,7 @@ namespace senf { ...@@ -261,7 +261,7 @@ namespace senf {
the exception description: the exception description:
\code \code
// Standard usage: Take \c errno from environment // Standard usage: Take \c errno from environment
SENF_THROW_SYSTEM_EXCEPTION() SENF_THROW_SYSTEM_EXCEPTION("::open()")
<< " while opening configuration file: " << filename; << " while opening configuration file: " << filename;
// You may however explicitly specify the errno value // You may however explicitly specify the errno value
......
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
// Custom includes // Custom includes
#include "../Console/Console.hh" #include "../Console/Console.hh"
#include "../Exception.hh"
#include <boost/filesystem/path.hpp>
//#include "FileTarget.mpp" //#include "FileTarget.mpp"
#define prefix_ #define prefix_
...@@ -35,21 +37,23 @@ ...@@ -35,21 +37,23 @@
namespace { namespace {
std::string quoteFilename(std::string filename) std::string getNodename(std::string const & filename, std::string const & nodename)
{ {
for (std::string::iterator i (filename.begin()); i != filename.end(); ++i) if (! nodename.empty())
if (! senf::console::CommandParser::isWordChar(*i)) return nodename;
*i = '_'; return boost::filesystem::path(filename).leaf();
return filename;
} }
} }
prefix_ senf::log::FileTarget::FileTarget(std::string const & file) prefix_ senf::log::FileTarget::FileTarget(std::string const & filename,
: ofstream_t(file.c_str(), std::ofstream::app), std::string const & nodename)
IOStreamTarget(quoteFilename(file), ofstream_t::member), : ofstream_t (filename.c_str(), std::ofstream::app),
file_(file) IOStreamTarget (getNodename(filename, nodename), ofstream_t::member),
file_ (filename)
{ {
if (! ofstream_t::member)
SENF_THROW_SYSTEM_EXCEPTION("logfile open") << ": " << filename;
consoleDir().add( "reopen", senf::membind( consoleDir().add( "reopen", senf::membind(
static_cast<void (FileTarget::*)()>(&FileTarget::reopen), static_cast<void (FileTarget::*)()>(&FileTarget::reopen),
this)) this))
...@@ -59,6 +63,8 @@ prefix_ senf::log::FileTarget::FileTarget(std::string const & file) ...@@ -59,6 +63,8 @@ prefix_ senf::log::FileTarget::FileTarget(std::string const & file)
this)) this))
.arg("filename","new filename") .arg("filename","new filename")
.overloadDoc("Reopen logfile under new name"); .overloadDoc("Reopen logfile under new name");
consoleDir().add("file", boost::cref(file_))
.doc("Show filename log messages are sent to");
} }
prefix_ void senf::log::FileTarget::reopen() prefix_ void senf::log::FileTarget::reopen()
...@@ -79,17 +85,21 @@ prefix_ void senf::log::FileTarget::reopen(std::string const & file) ...@@ -79,17 +85,21 @@ prefix_ void senf::log::FileTarget::reopen(std::string const & file)
prefix_ senf::log::FileTarget::RegisterConsole::RegisterConsole() prefix_ senf::log::FileTarget::RegisterConsole::RegisterConsole()
{ {
namespace kw = senf::console::kw;
detail::TargetRegistry::instance().consoleDir().add("file-target",&RegisterConsole::create) detail::TargetRegistry::instance().consoleDir().add("file-target",&RegisterConsole::create)
.arg("filename", "name of logfile") .arg("filename", "name of logfile")
.arg("nodename", "name of node in console. Defaults to the files basename",
kw::default_value = "")
.doc("Create new file target. Examples:\n" .doc("Create new file target. Examples:\n"
"\n" "\n"
"Create new file target '/var/log/example.log\n" "Create new file target '/var/log/example.log\n"
" $ file-target \"/var/log/example.log\"\n" " $ file-target \"/var/log/example.log\"\n"
" <Directory '/sys/log/_var_log_example.log'>\n" " <Directory '/sys/log/example.log'>\n"
"\n" "\n"
"In a configuration file, create new file target '/var/log/example.log' and set\n" "In a configuration file, create new file target '/var/log/example.log' and set\n"
"some parameters (If written on one line, this works at the console too:\n" "some parameters (If written on one line, this works at the console too:\n"
" /sys/log/file-target \"/var/log/example.log\" {\n" " /sys/log/file-target \"/var/log/example.log\" mainlog {\n"
" route (IMPORTANT); # route all important messages\n" " route (IMPORTANT); # route all important messages\n"
" timeFormat \"\"; # use non-formatted time format\n" " timeFormat \"\"; # use non-formatted time format\n"
" showArea false; # don't show log area\n" " showArea false; # don't show log area\n"
...@@ -97,9 +107,10 @@ prefix_ senf::log::FileTarget::RegisterConsole::RegisterConsole() ...@@ -97,9 +107,10 @@ prefix_ senf::log::FileTarget::RegisterConsole::RegisterConsole()
} }
prefix_ boost::shared_ptr<senf::console::DirectoryNode> prefix_ boost::shared_ptr<senf::console::DirectoryNode>
senf::log::FileTarget::RegisterConsole::create(std::string const & filename) senf::log::FileTarget::RegisterConsole::create(std::string const & filename,
std::string const & nodename)
{ {
std::auto_ptr<Target> tp (new FileTarget(filename)); std::auto_ptr<Target> tp (new FileTarget(filename, nodename));
Target & target (*tp.get()); Target & target (*tp.get());
detail::TargetRegistry::instance().dynamicTarget(tp); detail::TargetRegistry::instance().dynamicTarget(tp);
return target.consoleDir().node().thisptr(); return target.consoleDir().node().thisptr();
......
...@@ -69,7 +69,7 @@ namespace log { ...@@ -69,7 +69,7 @@ namespace log {
///\name Structors and default members ///\name Structors and default members
///@{ ///@{
explicit FileTarget(std::string const & filename); explicit FileTarget(std::string const & filename, std::string const & nodename = "");
///< Construct FileTarget writing to \a file ///< Construct FileTarget writing to \a file
///@} ///@}
...@@ -84,7 +84,7 @@ namespace log { ...@@ -84,7 +84,7 @@ namespace log {
struct RegisterConsole { struct RegisterConsole {
RegisterConsole(); RegisterConsole();
static boost::shared_ptr<senf::console::DirectoryNode> create( static boost::shared_ptr<senf::console::DirectoryNode> create(
std::string const & filename); std::string const & filename, std::string const & nodename);
static RegisterConsole instance; static RegisterConsole instance;
}; };
}; };
......
...@@ -313,7 +313,7 @@ namespace { ...@@ -313,7 +313,7 @@ namespace {
std::string formatLabel(std::string const & l) std::string formatLabel(std::string const & l)
{ {
if (l.empty()) if (l.empty())
return "-"; return "*";
if (l.size() > 29) if (l.size() > 29)
return l.substr(l.size()-29); return l.substr(l.size()-29);
return l; return l;
...@@ -323,7 +323,7 @@ namespace { ...@@ -323,7 +323,7 @@ namespace {
prefix_ void senf::log::Target::consoleList(std::ostream & os) prefix_ void senf::log::Target::consoleList(std::ostream & os)
{ {
static char const * levels[] = { static char const * levels[] = {
"none", "verbose", "notice", "message", "important", "critical", "fatal", "disabled" }; "verbose", "verbose", "notice", "message", "important", "critical", "fatal", "disabled" };
boost::format fmt ("%2d %-29s %-29s %-9s %-6s\n"); boost::format fmt ("%2d %-29s %-29s %-9s %-6s\n");
os << fmt % "#" % "STREAM" % "AREA" % "LEVEL" % "ACTION"; os << fmt % "#" % "STREAM" % "AREA" % "LEVEL" % "ACTION";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment