2003-09-13 22:34:30 +02:00
|
|
|
/*
|
|
|
|
* OpenMODBUS/TCP to RS-232/485 MODBUS RTU gateway
|
|
|
|
*
|
|
|
|
* log.c - debug logging facility
|
|
|
|
*
|
2015-02-25 11:33:57 +01:00
|
|
|
* Copyright (c) 2002-2003, 2013, Victor Antonovich (v.antonovich@gmail.com)
|
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
2015-02-25 11:33:57 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* - Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
2015-02-25 11:33:57 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* - Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
2015-02-25 11:33:57 +01:00
|
|
|
*
|
2003-09-13 22:34:30 +02:00
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
|
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
2015-02-25 11:33:57 +01:00
|
|
|
* $Id: log.c,v 1.6 2015/02/25 10:33:57 kapyar Exp $
|
2003-09-13 22:34:30 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include "log.h"
|
|
|
|
|
|
|
|
#ifdef LOG
|
|
|
|
#include "cfg.h"
|
|
|
|
|
|
|
|
/* log file full name */
|
|
|
|
char logfullname[INTBUFSIZE + 1];
|
|
|
|
|
2015-02-25 11:33:57 +01:00
|
|
|
int
|
2003-09-13 22:34:30 +02:00
|
|
|
log_init(char *logname)
|
|
|
|
{
|
|
|
|
FILE *logfile;
|
|
|
|
int maxlen = INTBUFSIZE;
|
|
|
|
|
|
|
|
/* checking log file name */
|
2003-10-26 20:26:08 +01:00
|
|
|
if (*logname == '/')
|
|
|
|
strncpy(logfullname, logname, maxlen);
|
2015-02-25 11:33:57 +01:00
|
|
|
else
|
2003-09-13 22:34:30 +02:00
|
|
|
{
|
2003-10-26 20:26:08 +01:00
|
|
|
if (!*logname)
|
|
|
|
{
|
|
|
|
/* logfile isn't needed */
|
|
|
|
*logfullname = '\0';
|
|
|
|
return RC_OK;
|
|
|
|
}
|
|
|
|
/* append default log path */
|
2003-09-13 22:34:30 +02:00
|
|
|
strncpy(logfullname, LOGPATH, maxlen);
|
|
|
|
maxlen -= strlen(logfullname);
|
|
|
|
strncat(logfullname, logname, maxlen);
|
|
|
|
}
|
|
|
|
|
|
|
|
logfile = fopen(logfullname, "at");
|
|
|
|
if (logfile)
|
|
|
|
{
|
|
|
|
fclose(logfile);
|
|
|
|
return RC_OK;
|
|
|
|
}
|
|
|
|
return RC_ERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Append message STRING to log file LOGNAME */
|
2015-02-25 11:33:57 +01:00
|
|
|
int
|
2003-09-13 22:34:30 +02:00
|
|
|
log_app(char *logname, char *string)
|
|
|
|
{
|
|
|
|
FILE *logfile;
|
|
|
|
logfile = fopen(logname, "at");
|
|
|
|
if (logfile)
|
|
|
|
{
|
|
|
|
fputs(string, logfile);
|
|
|
|
fclose(logfile);
|
|
|
|
return RC_OK;
|
|
|
|
}
|
|
|
|
return RC_ERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Put message with format FMT with errorlevel LEVEL to log file */
|
2015-02-25 11:33:57 +01:00
|
|
|
void
|
|
|
|
logw(int level, char *fmt, ...)
|
2003-09-13 22:34:30 +02:00
|
|
|
{
|
|
|
|
#ifdef HRDATE
|
|
|
|
time_t tt;
|
|
|
|
struct tm *t;
|
|
|
|
#else
|
|
|
|
struct timeval tv;
|
|
|
|
#endif
|
|
|
|
va_list args;
|
|
|
|
int strsize = 0;
|
|
|
|
static char str[INTBUFSIZE + 1] = {0}, *p;
|
|
|
|
|
2003-10-02 22:03:55 +02:00
|
|
|
if (level > cfg.dbglvl) return;
|
2003-09-13 22:34:30 +02:00
|
|
|
#ifdef HRDATE
|
|
|
|
tt = time(NULL);
|
|
|
|
t = localtime(&tt);
|
|
|
|
strsize += strftime(str, 32, "%d %b %Y %H:%M:%S ", t);
|
|
|
|
#else
|
|
|
|
(void)gettimeofday(&tv, NULL);
|
|
|
|
strsize += snprintf(str, 32, "%06lu:%06lu ", tv.tv_sec, tv.tv_usec);
|
|
|
|
#endif
|
|
|
|
va_start(args, fmt);
|
|
|
|
p = str + strsize;
|
|
|
|
strsize += vsnprintf(p, INTBUFSIZE - strsize, fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
strcpy(str + strsize++, "\n");
|
2017-11-02 12:45:52 +01:00
|
|
|
if (!isdaemon) fprintf(stderr, "%s", str);
|
2003-10-02 22:03:55 +02:00
|
|
|
if (*logfullname == '\0') return;
|
2003-09-13 22:34:30 +02:00
|
|
|
log_app(logfullname, str);
|
|
|
|
}
|
|
|
|
#endif
|