Feedback on the proposed debug/logging system:

 1. If you want to be compatible with Linux syslog, you could define the
    levels the same:  LOG_EMERG=0; LOG_ALERT=1; LOG_CRIT=2; LOG_ERR=3;
    LOG_WARNING=4; LOG_NOTICE=5; LOG_INFO=6; LOG_DEBUG=7.   That would
    make it easier if someone wanted to connect it to syslog at some point.
 2. Additional (deeper) levels of debug information are nice because you
    might include a lot of information at LOG_DEBUG level during
    development but then want to turn it off when things are working,
    without removing or commenting-out the statements, in case they're
    needed again some day.   e.g. LOG_DEBUG_2=8; LOG_DEBUG_3=9.
 3. There's a decision built in here:  is the overall log level a
    statically-defined value or a variable?  The former is less
    flexible, but it does allow you to leave the LOGGER/LOGDBG
    statements always there and rely on the optimizer to eliminate dead
    code above the current log level.   For instance:
         #if CMAKE_BUILD_TYPE == Debug
         #define CURRENT_LOG_LEVEL LOG_INFO
         #else
         #define CURRENT_LOG_LEVEL LOG_ERR
         #endif
         #define LOGGER(level, channel, msg, ...) if (level <=
    CURRENT_LOG_LEVEL) { log_msg(...); }
    An optimizing compiler should throw the code away any time the
    overall level is too low (assuming "level" is a macro-constant).  
    You don't need separate macros that way -- a release build should
    naturally toss all the LOGGER(LOG_INFO,....) statements; a debug
    build would leave them in.  (For clarity, I'm leaving out macro
    niceties such as extra parentheses and "do {xxx} while(0)".)
 4. In such a case, it'd be nice to make the CURRENT_LOG_LEVEL something
    you can set as a Cmake macro that becomes a "-Dxxx" option:
         #ifndef CURRENT_LOG_LEVEL
         #define CURRENT_LOG_LEVEL something
         #endif
    Then you can build a fully-optimized build with full logging, if you
    like.  Just set it to a higher value than normal.
 5. It'd be nice to have a way to turn on and off timestamps on the log
    messages.  Either a log_with_timestamps(bool) entrypoint or perhaps
    a separate LOGGER_WITH_TIMESTAMP() call?
 6. It'd be nice to be able to tell the logging system to send its
    messages to stderr, stdout, or an arbitrary fildes.  Like a logging
    subscription service.   Then it's just a small patch to add a new
    fildes and use it for a custom output-handling system.
 7. A flush function is nice in case you're working with code that can
    crash the system.
 8. The idea of popping up a dialog box is tricky:
     1. Such a system should really handle localization of the messages.
     2. The dialog style may not match dialogs everywhere else on the
        system.   I would lean here toward an architecture where user
        interaction is a pluggable module.  The default version might
        just interact at the stderr/stdout level.   But different
        vendors could plug in their own back-end for Qt, Gnome, Mac,
        Windows, whatever.   Such a system would also handle things like
        asking for a password, verifying a certificate, etc.   This is a
        much bigger job than just the logging question.
     3. So... I'd just kick that can down the road for now.  If it's
        easy to output the information to a file, people can write their
        own code to deal with that file.  For now.

Regards,
Daryl Poe
HP Thin Clients

On 12/5/2012 12:17 PM, Marc-André Moreau wrote:
> <clip>
> As for using the mailing list, yes, it ought to be used. Another discussion
> for which I would really appreciate some help is the design of a better
> debug/log system. The current one is severely limited, and there is a large
> number of requirements which an ideal debug/log system would need to meet.
> Since this affects everyone and pretty much all the code, I need your input
> on this. We're currently collecting information on this wiki page:
> https://github.com/FreeRDP/FreeRDP/wiki/Debug-System
>
> I repeat, I need input on this. I'd rather have it before than after it's
> changed. It's a tough design question, and I'd rather make the change to a
> well designed debug system once than switch to something partially proper
> and still need to change it a lot later on.
>

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Freerdp-devel mailing list
Freerdp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freerdp-devel

Reply via email to