Annotation of mqtt/src/logmqtt.c, revision 1.4

1.4     ! misho       1: /*************************************************************************
        !             2: * (C) 2011 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
        !             3: *  by Michael Pounov <misho@openbsd-bg.org>
        !             4: *
        !             5: * $Author: misho $
        !             6: * $Id: logmqtt.c,v 1.3.2.1 2012/07/03 12:22:56 misho Exp $
        !             7: *
        !             8: **************************************************************************
        !             9: The ELWIX and AITNET software is distributed under the following
        !            10: terms:
        !            11: 
        !            12: All of the documentation and software included in the ELWIX and AITNET
        !            13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
        !            14: 
        !            15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
        !            16:        by Michael Pounov <misho@elwix.org>.  All rights reserved.
        !            17: 
        !            18: Redistribution and use in source and binary forms, with or without
        !            19: modification, are permitted provided that the following conditions
        !            20: are met:
        !            21: 1. Redistributions of source code must retain the above copyright
        !            22:    notice, this list of conditions and the following disclaimer.
        !            23: 2. Redistributions in binary form must reproduce the above copyright
        !            24:    notice, this list of conditions and the following disclaimer in the
        !            25:    documentation and/or other materials provided with the distribution.
        !            26: 3. All advertising materials mentioning features or use of this software
        !            27:    must display the following acknowledgement:
        !            28: This product includes software developed by Michael Pounov <misho@elwix.org>
        !            29: ELWIX - Embedded LightWeight unIX and its contributors.
        !            30: 4. Neither the name of AITNET nor the names of its contributors
        !            31:    may be used to endorse or promote products derived from this software
        !            32:    without specific prior written permission.
        !            33: 
        !            34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
        !            35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            37: ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            44: SUCH DAMAGE.
        !            45: */
1.2       misho      46: #include "global.h"
                     47: 
                     48: 
                     49: extern char *__progname;
                     50: 
                     51: 
                     52: /*
                     53:  * mqtt_rtlm_log() Log message
                     54:  *
                     55:  * @fmt = format string
                     56:  * @... = argument list
                     57:  * return: none
                     58:  */
                     59: static void
                     60: mqtt_rtlm_log(const char *fmt, ...)
                     61: {
                     62:        va_list lst;
                     63: 
                     64:        va_start(lst, fmt);
                     65:        vsyslog(LOG_ERR, fmt, lst);
                     66:        va_end(lst);
                     67: }
                     68: #define MQTT_RTLM_LOG()        (mqtt_rtlm_log("Error:: System #%d - %s", errno, strerror(errno)))
                     69: 
                     70: 
                     71: /*
                     72:  * mqtt_rtlm_open() Open log file
                     73:  *
                     74:  * @cfg = loaded config
                     75:  * return: NULL error or SQL handle
                     76:  */
                     77: FILE *
1.3       misho      78: mqtt_rtlm_open(cfg_root_t *cfg)
1.2       misho      79: {
                     80:        FILE *f = NULL;
                     81:        const char *str = NULL;
                     82: 
                     83:        if (!cfg)
                     84:                return NULL;
                     85: 
1.3       misho      86:        str = cfg_getAttribute(cfg, "mqtt_log", "name");
1.2       misho      87:        if (!str) {
                     88:                mqtt_rtlm_log("Error:: Unknown file name ...\n");
                     89:                return NULL;
                     90:        }
                     91: 
                     92:        if (!(f = fopen(str, "a"))) {
                     93:                MQTT_RTLM_LOG();
                     94:                return NULL;
                     95:        }
                     96: 
                     97:        return f;
                     98: }
                     99: 
                    100: /*
                    101:  * mqtt_rtlm_close() Close log file
                    102:  *
                    103:  * @f = File handle
                    104:  * return: none
                    105:  */
                    106: void
                    107: mqtt_rtlm_close(FILE *f)
                    108: {
                    109:        if (f)
                    110:                fclose(f);
                    111: }
                    112: 
                    113: /*
                    114:  * mqtt_rtlm_logger() Logger to file
                    115:  *
                    116:  * @f = File handle
                    117:  * @fmt = Message format
                    118:  * @... = argument list
                    119:  * return: -1 error or >-1 logged successful
                    120:  */
                    121: int
                    122: mqtt_rtlm_logger(FILE *f, const char *fmt, ...)
                    123: {
                    124:        va_list lst;
                    125:        int ret = 0;
                    126:        char szStr[STRSIZ] = { 0 }, szFmt[BUFSIZ] = { 0 };
                    127:        struct tm *tm;
                    128:        time_t tim;
                    129: 
                    130:        if (!f || !fmt)
                    131:                return -1;
                    132: 
                    133:        tim = time(NULL);
                    134:        tm = localtime(&tim);
                    135:        strftime(szFmt, sizeof szFmt, "[%Y-%m-%d %H:%M:%S] ", tm);
                    136:        snprintf(szStr, sizeof szStr, "%s (%d):: ", __progname, getpid());
                    137:        strlcat(szFmt, szStr, sizeof szFmt);
                    138:        strlcat(szFmt, fmt, sizeof szFmt);
                    139: 
                    140:        va_start(lst, fmt);
                    141:        ret = vfprintf(f, szFmt, lst);
                    142:        va_end(lst);
                    143: 
                    144:        fflush(f);
                    145:        return ret;
                    146: }

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