File:  [ELWIX - Embedded LightWeight unIX -] / mqtt / src / logmqtt.c
Revision 1.1.2.4: download - view: text, annotated - select for diffs - revision graph
Fri Dec 16 02:09:20 2011 UTC (12 years, 6 months ago) by misho
Branches: mqtt1_0
finish connect

#include "global.h"


extern char *__progname;


/*
 * mqtt_rtlm_log() Log message
 *
 * @fmt = format string
 * @... = argument list
 * return: none
 */
static void
mqtt_rtlm_log(const char *fmt, ...)
{
	va_list lst;

	va_start(lst, fmt);
	vsyslog(LOG_ERR, fmt, lst);
	va_end(lst);
}
#define MQTT_RTLM_LOG()	(mqtt_rtlm_log("Error:: System #%d - %s", errno, strerror(errno)))


/*
 * mqtt_rtlm_open() Open log file
 *
 * @cfg = loaded config
 * return: NULL error or SQL handle
 */
FILE *
mqtt_rtlm_open(sl_config *cfg)
{
	FILE *f = NULL;
	const char *str = NULL;

	if (!cfg)
		return NULL;

	str = (const char*) cfg_GetAttribute(cfg, CFG("mqtt_log"), CFG("name"));
	if (!str) {
		mqtt_rtlm_log("Error:: Unknown file name ...\n");
		return NULL;
	}

	if (!(f = fopen(str, "a"))) {
		MQTT_RTLM_LOG();
		return NULL;
	}

	return f;
}

/*
 * mqtt_rtlm_close() Close log file
 *
 * @f = File handle
 * return: none
 */
void
mqtt_rtlm_close(FILE *f)
{
	if (f)
		fclose(f);
}

/*
 * mqtt_rtlm_logger() Logger to file
 *
 * @f = File handle
 * @fmt = Message format
 * @... = argument list
 * return: -1 error or >-1 logged successful
 */
int
mqtt_rtlm_logger(FILE *f, const char *fmt, ...)
{
	va_list lst;
	int ret = 0;
	char szStr[STRSIZ] = { 0 }, szFmt[BUFSIZ] = { 0 };
	struct tm *tm;
	time_t tim;

	if (!f || !fmt)
		return -1;

	tim = time(NULL);
	tm = localtime(&tim);
	strftime(szFmt, sizeof szFmt, "[%Y-%m-%d %H:%M:%S] ", tm);
	snprintf(szStr, sizeof szStr, "%s (%d):: ", __progname, getpid());
	strlcat(szFmt, szStr, sizeof szFmt);
	strlcat(szFmt, fmt, sizeof szFmt);

	va_start(lst, fmt);
	ret = vfprintf(f, szFmt, lst);
	va_end(lst);

	fflush(f);
	return ret;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>