Syslog client for mbed-os 5

Fork of logger by Suga koubou

logger.cpp

Committer:
infinnovation
Date:
2016-10-14
Revision:
2:ce978c9ea3e8
Parent:
1:f7e32e99f366
Child:
3:91ee7ead8536

File content as of revision 2:ce978c9ea3e8:

/*
 * syslog device library
 * Copyright (c) 2011 Hiroshi Suga
 * Released under the MIT License: http://mbed.org/license/mit
 */

/** @file logger.cpp
 * @brief syslog device (sender/client)
 */

#include "logger.h"
#include <cstdio>

static const char mstr[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

Logger::Logger(NetworkInterface *netif, const char *host) {
    Logger(netif, host, netif->get_ip_address());
}

Logger::Logger(NetworkInterface *netif, const char *host, const char *myname) {
    _remote = SocketAddress(host, LOG_UDPPORT);
    snprintf(_ident, sizeof(_ident), "%s", myname);
    int err = _udpsock.open(netif);
    _udpsock.bind(LOG_UDPPORT);
}

void Logger::send(const char *tag, const char *content) {
    send(LOG_NOTICE, LOG_USER, tag, content);
}

void Logger::send(LOG_SEVERITY sev, LOG_FACILITY fac, const char *tag, const char *content) {
    int pri, len;
    time_t ctTime;
    struct tm *t;
    char logmsg[LOG_LEN];

    ctTime = time(NULL);  
    t = localtime(&ctTime);
    pri = (fac * 8) | sev;

    sprintf(logmsg, "<%d>%s %2d %02d:%02d:%02d %s ", pri,
            mstr[t->tm_mon - 1], t->tm_mday,
            t->tm_hour, t->tm_min, t->tm_sec, _ident);

    len = strlen(tag);
    if (len > 32) len = 32;
    strncat(logmsg, tag, len);

    strcat(logmsg, " ");

    len = strlen(content);
    if (len > LOG_LEN - strlen(logmsg) - 1) len = LOG_LEN - strlen(logmsg) - 1;
    strncat(logmsg, content, len);

    _udpsock.sendto(_remote, logmsg, strlen(logmsg));
}