first attempt to organize the nobug flags for review

I grepped out all flags which are actually defined/used in lumiera and
refactored them into one big tree here. There are some annotations and
issues which shall be finally resolved. Please check if the intended
hierarchy looks OK this way and add more flags when you think some are
missing. I chosen to make a quite verbose hierarchy, this doesnt cost much
in nobug and adds some flexibility. The Documentation at the head needs to
be reviewed. Many flags which are collected here need to be brought back
into the subsystems which use them, this is only to get a big picture for
now.
This commit is contained in:
Christian Thaeter 2009-01-22 09:44:29 +01:00
parent 28c758b032
commit ef6344057c
3 changed files with 182 additions and 149 deletions

View file

@ -1,47 +1,37 @@
/*
NoBugCfg - NoBug definitions and initialisation for the Proc-Layer
logging.cpp - Configure basic nobug logging
Copyright (C) Lumiera.org
2008, Christian Thaeter <ct@pipapo.org>
2008, 2009 Christian Thaeter <ct@pipapo.org>
Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
*/
#include "include/nobugcfg.h"
#define LOGGING_C
#define NOBUG_INIT_DEFS_
#include "include/nobugcfg.h"
#undef NOBUG_INIT_DEFS_
namespace lumiera {
void
initialise_NoBug ()
{
NOBUG_INIT;
#ifdef DEBUG
static uint callCount = 0;
ASSERT ( 0 == callCount++ );
#endif
}
}
/*
logging.h defines the flags here, thats all
*/
#include "logging.h"
/*
// Local Variables:
// mode: C
// c-file-style: "gnu"
// indent-tabs-mode: nil
// End:
*/

162
src/common/logging.h Normal file
View file

@ -0,0 +1,162 @@
/*
logging.h - Configure basic nobug logging
Copyright (C) Lumiera.org
2008, 2009 Christian Thaeter <ct@pipapo.org>
Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef LUMIERA_LOGGING_H
#define LUMIERA_LOGGING_H
/** @file logging.h
** This header is for including and configuring NoBug.
** The idea is that configuration and some commonly used flag
** declarations are to be kept in one central location. Subsystems
** are free to define and use additional flags for local use. Typically,
** this header will be included via some of the basic headers like error.hpp,
** which in turn gets included e.g. by proc/common.hpp
**
** This header can thus be assumed to be effectively global. It should contain
** only declarations of global relevance, as any change causes the whole project
** to be rebuilt. All flags defined here are automatic initialised.
**
** We use the 'NOBUG_DECLARATIONS_ONLY' magic to generate declarations and
** definitions only out of this header.
**
** @par Logging configuration
** By default, logging is configured such as to emit a small number of informative
** messages on the starting terminal and to report fatal errors. But besides the
** usual fine-grained tracing messages, we define a small number of distinct
** thematic <b>Logging Channels</b> providing a consistent high-level view of
** what is going on with regards to a specific aspect of the application
** - \c progress documents a high-level overall view of what the application \em does
** - \c render focuses on the working of the render engine (without logging each frame)
** - \c config shows anything of relevance regarding the configured state of App and session
** - \c memory allows to diagnose a high-level view of memory management
**
** Any log level can be overridden by an environment variable, for example
** \code NOBUG_LOG='progress:INFO' ./lumiera \endcode
**
** @todo logging to files? NOBUG_LOG='progress:INFO@file(name=filename)' api to set this statically up by the program will follow --cehteh
** @todo review this documentation ################################################################################################################################
*/
#include <nobug.h>
#ifndef LUMIERA_LOGGING_C
#define NOBUG_DECLARE_ONLY 1
#endif
/** the root switch for all logging */
NOBUG_CPP_DEFINE_FLAG (all);
/** debug logging */
NOBUG_CPP_DEFINE_FLAG_PARENT ( debugging, all);
/** debug logging for the main application starter */
NOBUG_CPP_DEFINE_FLAG_PARENT ( main_dbg, debugging);
/** base of debug logging for the backend */
NOBUG_CPP_DEFINE_FLAG_PARENT ( backend_dbg, debugging);
NOBUG_CPP_DEFINE_FLAG_PARENT ( file_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( filehandle_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( filehandlecache_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( filedescriptor_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( mmap_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( mmapcache_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( mmapings_dbg, backend_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( threads_dbg, backend_dbg);
/** base of debug logging for the proc layer */
NOBUG_CPP_DEFINE_FLAG_PARENT ( proc_dbg, debugging);
/** base of debug logging for the gui */
NOBUG_CPP_DEFINE_FLAG_PARENT ( gui_dbg, debugging);
/** base if debug logging for the support library */
NOBUG_CPP_DEFINE_FLAG_PARENT ( library_dbg, debugging);
NOBUG_CPP_DEFINE_FLAG_PARENT ( psplay_dbg, library_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( resourcecollector_dbg, library_dbg);
/** base of debug logging for the common library */
NOBUG_CPP_DEFINE_FLAG_PARENT ( common_dbg, debugging);
NOBUG_CPP_DEFINE_FLAG_PARENT ( config_dbg, common_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( configfile_dbg, config_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( configitem_dbg, config_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( configtyped_dbg, config_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( configlookup_dbg, config_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( interface_dbg, common_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( interfaceregistry_dbg, interface_dbg);
NOBUG_CPP_DEFINE_FLAG_PARENT ( plugin_dbg, common_dbg);
/** base of runtime logging always available */
NOBUG_CPP_DEFINE_FLAG_PARENT ( logging, all);
/** general application progress base */
NOBUG_CPP_DEFINE_FLAG_PARENT ( progress, logging);
/** progress log for the main starter */
NOBUG_CPP_DEFINE_FLAG_PARENT ( main, progress);
/** progress log for the backend */
NOBUG_CPP_DEFINE_FLAG_PARENT ( backend, progress);
NOBUG_CPP_DEFINE_FLAG_PARENT ( file, backend); //opening/closing files etc
/** progress log for the proc layer */
NOBUG_CPP_DEFINE_FLAG_PARENT ( proc, progress);
/** progress log for the render subsystem of proc */
NOBUG_CPP_DEFINE_FLAG_PARENT ( render, proc); //ichthyo: did you want this as global channel or as progress child?
/** progress log for the gui */
NOBUG_CPP_DEFINE_FLAG_PARENT ( gui, progress);
/** progress log for the support lib */
NOBUG_CPP_DEFINE_FLAG_PARENT ( library, progress);
NOBUG_CPP_DEFINE_FLAG_PARENT ( resourcecollector, library);
/** progress log for the common lib */
NOBUG_CPP_DEFINE_FLAG_PARENT ( common, progress);
/** progress log, config subsystem */
NOBUG_CPP_DEFINE_FLAG_PARENT ( config, common);
NOBUG_CPP_DEFINE_FLAG_PARENT ( configfiles, config); //reading, writing, lookup configfiles
NOBUG_CPP_DEFINE_FLAG_PARENT ( configtyped, config); //values queried, errors
/** progress log, interfaces */
NOBUG_CPP_DEFINE_FLAG_PARENT ( interface, common);
NOBUG_CPP_DEFINE_FLAG_PARENT ( interfaceregistry, common); //interfaces which get registered/removed
/** progress log, plugin loader*/
NOBUG_CPP_DEFINE_FLAG_PARENT ( plugin, common); //plugins loaded/unloaded/errors
/** base flag for software testing */
NOBUG_CPP_DEFINE_FLAG_PARENT ( test, logging);
/** base flag for syncronization logging */
NOBUG_CPP_DEFINE_FLAG_PARENT ( sync, logging);
NOBUG_CPP_DEFINE_FLAG_PARENT ( mutex_sync, sync); //locking/unlocking mutexes
NOBUG_CPP_DEFINE_FLAG_PARENT ( condwait_sync, sync); //waiting and signalling condition vars
/** base flag for memory related logging */
NOBUG_CPP_DEFINE_FLAG_PARENT ( memory, logging);
/** memory busines of the proc layer */
NOBUG_CPP_DEFINE_FLAG_PARENT ( proc_mem, memory);
NOBUG_CPP_DEFINE_FLAG_PARENT ( mobject_mem, proc_mem);
NOBUG_CPP_DEFINE_FLAG_PARENT ( builder_mem, proc_mem);
NOBUG_CPP_DEFINE_FLAG_PARENT ( asset_mem, proc_mem);
/** event which drive the application are separately logged to reconstruct what happend/yielded to a problem */
NOBUG_CPP_DEFINE_FLAG_PARENT ( events, all);
/** caveat joel, you need to implement this */
NOBUG_CPP_DEFINE_FLAG_PARENT ( gui_event, all);
#ifndef LUMIERA_LOGGING_C
#undef NOBUG_DECLARE_ONLY
#define NOBUG_DECLARE_ONLY 0
#endif
#endif
/*
// Local Variables:
// mode: C
// c-file-style: "gnu"
// indent-tabs-mode: nil
// End:
*/

View file

@ -1,119 +0,0 @@
/*
NOBUGCFG.h - NoBug definitions and initialisation for the Proc-Layer
Copyright (C) Lumiera.org
2008, Christian Thaeter <ct@pipapo.org>
Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file nobugcfg.h
** This header is for including and configuring NoBug.
** The idea is that configuration and some commonly used flag
** declarations are to be kept in one central location. Subsystems
** are free to define and use additional flags for local use. Typically,
** this header will be included via some of the basic headers like error.hpp,
** which in turn gets included e.g. by proc/common.hpp
**
** This header can thus be assumed to be effectively global. It should contain
** only declarations of global relevance, as any change causes the whole project
** to be rebuilt. Moreover, for C++ this header assures automatic initialisation
** of NoBug by placing a static ctor call.
**
** Besides the usual guarded declarations, this header contains one section
** with the corresponding <b>definitions</b>. This section is to be included once
** by some translation unit (currently this is lumiera/nobugcfg.cpp) in order to
** generate the necessary definitions.
**
** @par Logging configuration
** By default, logging is configured such as to emit a small number of informative
** messages on the starting terminal and to report fatal errors. But besides the
** usual fine-grained tracing messages, we define a small number of distinct
** thematic <b>Logging Channels</b> providing a consistent high-level view of
** what is going on with regards to a specific aspect of the application
** - \c operate documents a high-level overall view of what the application \em does
** - \c render focuses on the working of the render engine (without logging each frame)
** - \c config shows anything of relevance regarding the configured state of App and session
** - \c memory allows to diagnose a high-level view of memory management
**
** Any log level can be overridden by an environment variable, for example
** \code NOBUG_LOG='operate:INFO' ./lumiera \endcode
**
** @todo logging to files?
*/
#ifndef NOBUGCFG_H /* ============= Part 1: DECLARATIONS ======== */
#define NOBUGCFG_H
#include <syslog.h>
#include <nobug.h>
#ifdef __cplusplus /* ============= C++ ================ */
#include "include/lifecycle.h"
#include "lib/error.hpp" ///< make assertions throw instead of abort()
namespace lumiera {
void initialise_NoBug ();
namespace {
LifecycleHook trigger_it_ (ON_BASIC_INIT, &initialise_NoBug);
} }
#endif /* =====================(End) C++ ================ */
/* declare flags used throughout the code base */
NOBUG_DECLARE_FLAG (all);
NOBUG_DECLARE_FLAG (lumiera_all);
NOBUG_DECLARE_FLAG (lumiera); ///< master log, informative console output
NOBUG_DECLARE_FLAG (operate); ///< logging channel reporting what the application does
NOBUG_DECLARE_FLAG (render); ///< logging channel focusing on the render engine's workings
NOBUG_DECLARE_FLAG (config); ///< logging channel covering application and session configuration
NOBUG_DECLARE_FLAG (memory); ///< logging channel covering memory management issues
NOBUG_DECLARE_FLAG (sync); ///< especially for tracing synchronisation
NOBUG_DECLARE_FLAG (test);
#endif /*NOBUGCFG_H ======= (End) Part 1: DECLARATIONS ======== */
#ifdef NOBUG_INIT_DEFS_ /*========== Part 2: DEFINITIONS ========= */
/* flags used throughout the code base... */
NOBUG_CPP_DEFINE_FLAG (all);
NOBUG_CPP_DEFINE_FLAG_PARENT (lumiera_all, all);
NOBUG_CPP_DEFINE_FLAG_PARENT (lumiera, lumiera_all);
NOBUG_CPP_DEFINE_FLAG_PARENT (config, lumiera);
NOBUG_CPP_DEFINE_FLAG_PARENT (operate, lumiera);
NOBUG_CPP_DEFINE_FLAG_PARENT_LIMIT (render, lumiera, LOG_WARNING);
NOBUG_CPP_DEFINE_FLAG_PARENT_LIMIT (memory, lumiera, LOG_WARNING);
NOBUG_CPP_DEFINE_FLAG_PARENT_LIMIT (sync, memory, LOG_WARNING);
NOBUG_CPP_DEFINE_FLAG_PARENT_LIMIT (test, all, LOG_ERR);
#endif /*NOBUG_INIT_DEFS_ ==== (End) Part 2: DEFINITIONS ========= */