Import existing source tree; original VCS history is no longer available. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
159 lines
4.0 KiB
C
159 lines
4.0 KiB
C
/*(LGPL)
|
|
---------------------------------------------------------------------------
|
|
logger.h - Simple logger with redirection
|
|
---------------------------------------------------------------------------
|
|
* Copyright (C) 2003, David Olofson
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation; either version 2.1 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#ifndef DO_LOGGER_H
|
|
#define DO_LOGGER_H
|
|
|
|
#include <stdio.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
TODO: Levels sending to multiple targets.
|
|
TODO: Printing to multiple levels.
|
|
*/
|
|
|
|
#define LOG_TARGETS 8
|
|
#define LOG_LEVELS 32
|
|
|
|
/*
|
|
* Standard log levels (so libs and stuff can share your logger! :-)
|
|
*/
|
|
#define ULOG 0 /* User: Messages meant for normal users */
|
|
#define WLOG 1 /* Warning: Warning messages */
|
|
#define ELOG 2 /* Error: Error messages */
|
|
#define VLOG 3 /* Verbose: Messages for advanced users */
|
|
#define DLOG 4 /* Debug: Debug messages */
|
|
|
|
|
|
typedef enum
|
|
{
|
|
LOG_ANSI = 0x00000001, /* Use ANSI escape codes */
|
|
LOG_HTML = 0x00000002, /* Use HTML formatting tags */
|
|
LOG_TIMESTAMP = 0x00000100 /* Timestamp messages */
|
|
} LOG_flags;
|
|
|
|
|
|
typedef enum
|
|
{
|
|
LOG_COLORS = 0x000f, /* Mask for color bits */
|
|
LOG_NOCOLOR = 0, /* Don't try to change! */
|
|
LOG_BLACK,
|
|
LOG_RED,
|
|
LOG_GREEN,
|
|
LOG_YELLOW,
|
|
LOG_BLUE,
|
|
LOG_MAGENTA,
|
|
LOG_CYAN,
|
|
LOG_WHITE,
|
|
LOG_BRIGHT = 0x0100, /* High intensity colors */
|
|
LOG_STRONG = 0x0200, /* Bold or underlined */
|
|
LOG_BLINK = 0x0400 /* Blinking, if possible */
|
|
} LOG_attributes;
|
|
|
|
|
|
/*
|
|
* The usual open/close calls...
|
|
*
|
|
* Note that log_close() may write footers and stuff to files,
|
|
* so you may get slightly broken log files if you exit
|
|
* without calling it!
|
|
*
|
|
* log_open() returns a negative value in case of failure.
|
|
*/
|
|
int log_open(void);
|
|
void log_close(void);
|
|
|
|
|
|
/*
|
|
* Send output through 'target' to 'stream'. 'stream' must be
|
|
* a valid stdio stream opened for output.
|
|
*
|
|
* If 'target' is -1, all targets are changed.
|
|
*/
|
|
void log_set_target_stream(int target, FILE *stream);
|
|
|
|
|
|
/*
|
|
* Send output through 'target' to 'callback'. The callback
|
|
* will receive the value passed as 'handle' as it's first
|
|
* argument, followed by the data to output. (NULL terminated
|
|
* string.) The callback should return the number of bytes
|
|
* successfully handled, or, in case of failure, a negative
|
|
* value.
|
|
*
|
|
* If 'target' is -1, all targets are changed.
|
|
*/
|
|
void log_set_target_callback(int target,
|
|
int (*callback)(int handle, const char *data), int handle);
|
|
|
|
|
|
/*
|
|
* Set formatting flags for 'target'.
|
|
*
|
|
* If 'target' is -1, all targets are changed.
|
|
*/
|
|
void log_set_target_flags(int target, unsigned flags);
|
|
|
|
|
|
/*
|
|
* Send output through 'level' to 'target'. 'levels' is a bit
|
|
* mask with one bit for each log level.
|
|
*
|
|
* If 'level' is -1, all levels are changed.
|
|
*/
|
|
void log_set_level_target(int level, int target);
|
|
|
|
|
|
/*
|
|
* Set attributes for 'level'.
|
|
*
|
|
* If 'level' is -1, all levels are changed.
|
|
*/
|
|
void log_set_level_attr(int level, unsigned attr);
|
|
|
|
|
|
/*
|
|
* Print 'text' to 'level'. 'level' is the index of the log
|
|
* level to print to. No formatting will be done, and the
|
|
* output will be followed by a "newline".
|
|
*
|
|
* Returns a negative value in case of failure.
|
|
*/
|
|
int log_puts(int level, const char *text);
|
|
|
|
|
|
/*
|
|
* Format and print to 'level'. 'level' is the index of the
|
|
* log level to print to.
|
|
*
|
|
* Returns a negative value in case of failure.
|
|
*/
|
|
int log_printf(int level, const char *format, ...);
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
#endif /* DO_LOGGER_H */
|