1
#include "../../uwsgi.h"
3
extern struct uwsgi_server uwsgi;
5
#define MAX_SYSLOG_PKT 1024
7
ssize_t uwsgi_rsyslog_logger(struct uwsgi_logger *ul, char *message, size_t len) {
9
char buf[MAX_SYSLOG_PKT];
14
if (!ul->configured) {
16
if (!uwsgi.choosen_logger_arg) {
17
uwsgi_log_safe("invalid rsyslog syntax\n");
21
ul->fd = socket(AF_INET, SOCK_DGRAM, 0);
23
uwsgi_error_safe("socket()");
27
uwsgi_socket_nb(ul->fd);
29
char *comma = strchr(uwsgi.choosen_logger_arg, ',');
35
ul->data = uwsgi_concat2(uwsgi.hostname," uwsgi");
39
char *port = strchr(uwsgi.choosen_logger_arg, ':');
45
ul->addr_len = socket_to_in_addr(uwsgi.choosen_logger_arg, NULL, portn, &ul->addr.sa_in);
47
if (port) *port = ':';
48
if (comma) *comma = ',';
54
current_time = time(NULL);
57
if (message[len-1] == '\n') len--;
59
rlen = snprintf(buf, MAX_SYSLOG_PKT, "<29>%.*s %s: %.*s", 15, ctime(¤t_time)+4, (char *) ul->data, (int) len, message);
61
return sendto(ul->fd, buf, rlen, 0, (const struct sockaddr *) &ul->addr, ul->addr_len);
67
void uwsgi_rsyslog_register() {
68
uwsgi_register_logger("rsyslog", uwsgi_rsyslog_logger);
71
int uwsgi_rsyslog_init() {
75
struct uwsgi_plugin rsyslog_plugin = {
78
.on_load = uwsgi_rsyslog_register,
79
.init = uwsgi_rsyslog_init