Log: Added logging support

This commit is contained in:
Paul Beckingham 2016-03-15 23:03:52 -04:00
parent a0c95edfcd
commit 3a751e628a
5 changed files with 46 additions and 17 deletions

View file

@ -25,12 +25,14 @@
////////////////////////////////////////////////////////////////////////////////
#include <cmake.h>
#include <Log.h>
#include <iostream>
////////////////////////////////////////////////////////////////////////////////
int CmdLog ()
int CmdLog (Log& log)
{
std::cout << "# log\n";
log.write ("debug", "----8<----");
return 0;
}

View file

@ -28,6 +28,7 @@
#define INCLUDED_COMMANDS
#include <Rules.h>
#include <Log.h>
int CmdClear ();
int CmdConfig ();
@ -40,7 +41,7 @@ int CmdExtension ();
int CmdGaps ();
int CmdHelpUsage ();
int CmdHelp ();
int CmdLog ();
int CmdLog (Log&);
int CmdImport ();
int CmdReport ();
int CmdStart ();

View file

@ -29,6 +29,7 @@
#include <Database.h>
#include <Rules.h>
#include <Extensions.h>
#include <Log.h>
//#include <Grammar.h>
//#include <LR0.h>
#include <shared.h>
@ -53,7 +54,10 @@ bool lightweightVersionCheck (int argc, const char** argv)
}
////////////////////////////////////////////////////////////////////////////////
void initializeData (Configuration& configuration, Database& database)
void initializeData (
Configuration& configuration,
Database& database,
Log& log)
{
// The $TIMEWARRIORDB environment variable overrides the default value of
// ~/.timewarrior‥
@ -120,6 +124,9 @@ void initializeData (Configuration& configuration, Database& database)
// Initialize the database (no data read), but files are enumerated.
database.initialize (data._data);
// TODO Give the log file a temp fake name. To be removed.
log.file (dbLocation._data + "/timewarrior.log");
std::cout << "# Configuration\n";
for (const auto& name : configuration.all ())
std::cout << "# " << name << "=" << configuration[name] << "\n";
@ -128,7 +135,10 @@ void initializeData (Configuration& configuration, Database& database)
}
////////////////////////////////////////////////////////////////////////////////
void initializeRules (Configuration& configuration, Rules& rules)
void initializeRules (
Configuration& configuration,
Rules& rules,
Log& log)
{
// TODO Load rule grammar.
/*
@ -148,7 +158,10 @@ void initializeRules (Configuration& configuration, Rules& rules)
}
////////////////////////////////////////////////////////////////////////////////
void initializeExtensions (Configuration& configuration, Extensions& extensions)
void initializeExtensions (
Configuration& configuration,
Extensions& extensions,
Log& log)
{
Directory extDir (configuration.get ("db"));
extDir += "extensions";
@ -165,7 +178,8 @@ int dispatchCommand (
Configuration& configuration,
Database& database,
Rules& rules,
Extensions& extensions)
Extensions& extensions,
Log& log)
{
int status {0};
@ -193,7 +207,7 @@ int dispatchCommand (
else if (closeEnough (allCommands[6], argv[1], 2)) status = CmdExport ();
else if (closeEnough (allCommands[7], argv[1], 2)) status = CmdGaps ();
else if (closeEnough (allCommands[8], argv[1], 2)) status = CmdImport ();
else if (closeEnough (allCommands[9], argv[1], 2)) status = CmdLog ();
else if (closeEnough (allCommands[9], argv[1], 2)) status = CmdLog (log);
else if (closeEnough (allCommands[10], argv[1], 2)) status = CmdReport ();
else if (closeEnough (allCommands[11], argv[1], 2)) status = CmdStart ();
else if (closeEnough (allCommands[12], argv[1], 2)) status = CmdStop ();

View file

@ -29,6 +29,7 @@
#include <Database.h>
#include <Rules.h>
#include <Extensions.h>
#include <Log.h>
//#include <Grammar.h>
#include <shared.h>
#include <commands.h>
@ -42,6 +43,11 @@
////////////////////////////////////////////////////////////////////////////////
int main (int argc, const char** argv)
{
// The log is needed early, in order to capture as much as possible, but will
// only be given a file name once configuration is loaded. The log therefore
// buffers the messages until it has a file name to write to.
Log log;
// Lightweight version checking that doesn't require initialization or I/O.
int status = 0;
if (lightweightVersionCheck (argc, argv))
@ -52,7 +58,7 @@ int main (int argc, const char** argv)
// Load the configuration, prepare the database, but do not read data.
Configuration configuration;
Database database;
initializeData (configuration, database);
initializeData (configuration, database, log);
// TODO Arrange the following to minimize memory use.
// TODO Load CLI grammar.
@ -73,31 +79,36 @@ int main (int argc, const char** argv)
// Load the rules.
Rules rules;
initializeRules (configuration, rules);
initializeRules (configuration, rules, log);
// Load extension script info.
Extensions extensions;
initializeExtensions (configuration, extensions);
initializeExtensions (configuration, extensions, log);
// Dispatch to commands.
status = dispatchCommand (argc, argv, configuration, database, rules, extensions);
status = dispatchCommand (argc, argv, configuration, database, rules, extensions, log);
}
catch (const std::string& error)
{
std::cerr << error << "\n";
log.write ("error", error);
status = -1;
}
catch (std::bad_alloc& error)
{
std::cerr << "Error: Memory allocation failed: " << error.what () << "\n";
auto message = std::string ("Memory allocation failed: ") + error.what ();
std::cerr << "Error: " << message << "\n";
log.write ("error", message);
status = -3;
}
catch (...)
{
std::cerr << "Error: Unknown problem, please report.\n";
auto message = "Unknown problem, please report.";
std::cerr << "Error: " << message << "\n";
log.write ("error", message);
status = -2;
}

View file

@ -31,12 +31,13 @@
#include <Database.h>
#include <Rules.h>
#include <Extensions.h>
#include <Log.h>
// init.cpp
bool lightweightVersionCheck (int, const char**);
void initializeData (Configuration&, Database&);
void initializeRules (Configuration&, Rules&);
void initializeExtensions (Configuration&, Extensions&);
int dispatchCommand (int, const char**, Configuration&, Database&, Rules&, Extensions&);
void initializeData (Configuration&, Database&, Log&);
void initializeRules (Configuration&, Rules&, Log&);
void initializeExtensions (Configuration&, Extensions&, Log&);
int dispatchCommand (int, const char**, Configuration&, Database&, Rules&, Extensions&, Log&);
#endif