10Sigor@sysoev.ru
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru */
60Sigor@sysoev.ru
70Sigor@sysoev.ru #include <nxt_main.h>
80Sigor@sysoev.ru
90Sigor@sysoev.ru
100Sigor@sysoev.ru nxt_uint_t nxt_debug;
111Sigor@sysoev.ru nxt_uint_t nxt_trace;
121Sigor@sysoev.ru
130Sigor@sysoev.ru
140Sigor@sysoev.ru nxt_log_t nxt_main_log = {
150Sigor@sysoev.ru NXT_LOG_INFO,
160Sigor@sysoev.ru 0,
170Sigor@sysoev.ru nxt_log_handler,
180Sigor@sysoev.ru NULL,
190Sigor@sysoev.ru NULL
200Sigor@sysoev.ru };
210Sigor@sysoev.ru
220Sigor@sysoev.ru
23564Svbart@nginx.com nxt_str_t nxt_log_levels[6] = {
240Sigor@sysoev.ru nxt_string("alert"),
250Sigor@sysoev.ru nxt_string("error"),
260Sigor@sysoev.ru nxt_string("warn"),
270Sigor@sysoev.ru nxt_string("notice"),
280Sigor@sysoev.ru nxt_string("info"),
290Sigor@sysoev.ru nxt_string("debug")
300Sigor@sysoev.ru };
310Sigor@sysoev.ru
320Sigor@sysoev.ru
330Sigor@sysoev.ru static const u_char *nxt_log_prefix;
340Sigor@sysoev.ru
350Sigor@sysoev.ru
360Sigor@sysoev.ru void
nxt_log_start(const char * prefix)370Sigor@sysoev.ru nxt_log_start(const char *prefix)
380Sigor@sysoev.ru {
390Sigor@sysoev.ru if (prefix != NULL && *prefix != '\0') {
400Sigor@sysoev.ru nxt_log_prefix = (u_char *) prefix;
410Sigor@sysoev.ru }
420Sigor@sysoev.ru }
430Sigor@sysoev.ru
440Sigor@sysoev.ru
450Sigor@sysoev.ru /* STUB */
460Sigor@sysoev.ru nxt_log_t *
nxt_log_set_ctx(nxt_log_t * log,nxt_log_ctx_handler_t handler,void * ctx)470Sigor@sysoev.ru nxt_log_set_ctx(nxt_log_t *log, nxt_log_ctx_handler_t handler, void *ctx)
480Sigor@sysoev.ru {
490Sigor@sysoev.ru nxt_log_t *old;
500Sigor@sysoev.ru nxt_thread_t *thr;
510Sigor@sysoev.ru
520Sigor@sysoev.ru thr = nxt_thread();
530Sigor@sysoev.ru old = thr->log;
540Sigor@sysoev.ru
550Sigor@sysoev.ru log->level = old->level;
560Sigor@sysoev.ru log->handler = old->handler;
570Sigor@sysoev.ru log->ctx_handler = handler;
580Sigor@sysoev.ru log->ctx = ctx;
590Sigor@sysoev.ru
600Sigor@sysoev.ru thr->log = log;
610Sigor@sysoev.ru
620Sigor@sysoev.ru return old;
630Sigor@sysoev.ru }
640Sigor@sysoev.ru
650Sigor@sysoev.ru
660Sigor@sysoev.ru void nxt_cdecl
nxt_log_handler(nxt_uint_t level,nxt_log_t * log,const char * fmt,...)670Sigor@sysoev.ru nxt_log_handler(nxt_uint_t level, nxt_log_t *log, const char *fmt, ...)
680Sigor@sysoev.ru {
69*1817Svbart@nginx.com u_char *p, *end;
70*1817Svbart@nginx.com #if 0
71*1817Svbart@nginx.com u_char *syslogmsg;
72*1817Svbart@nginx.com #endif
730Sigor@sysoev.ru va_list args;
740Sigor@sysoev.ru u_char msg[NXT_MAX_ERROR_STR];
750Sigor@sysoev.ru
760Sigor@sysoev.ru p = msg;
770Sigor@sysoev.ru end = msg + NXT_MAX_ERROR_STR;
780Sigor@sysoev.ru
790Sigor@sysoev.ru if (nxt_log_prefix != NULL) {
800Sigor@sysoev.ru p = nxt_cpystrn(p, nxt_log_prefix, end - p);
810Sigor@sysoev.ru *p++ = ':';
820Sigor@sysoev.ru *p++ = ' ';
830Sigor@sysoev.ru }
840Sigor@sysoev.ru
85*1817Svbart@nginx.com #if 0
860Sigor@sysoev.ru syslogmsg = p;
87*1817Svbart@nginx.com #endif
880Sigor@sysoev.ru
890Sigor@sysoev.ru p = nxt_sprintf(p, end, (log->ident != 0) ? "[%V] *%D " : "[%V] ",
900Sigor@sysoev.ru &nxt_log_levels[level], log->ident);
910Sigor@sysoev.ru
920Sigor@sysoev.ru va_start(args, fmt);
930Sigor@sysoev.ru p = nxt_vsprintf(p, end, fmt, args);
940Sigor@sysoev.ru va_end(args);
950Sigor@sysoev.ru
960Sigor@sysoev.ru if (level != NXT_LOG_DEBUG && log->ctx_handler != NULL) {
970Sigor@sysoev.ru p = log->ctx_handler(log->ctx, p, end);
980Sigor@sysoev.ru }
990Sigor@sysoev.ru
100704Sigor@sysoev.ru if (p > end - nxt_length("\n")) {
101704Sigor@sysoev.ru p = end - nxt_length("\n");
1020Sigor@sysoev.ru }
1030Sigor@sysoev.ru
104704Sigor@sysoev.ru *p++ = '\n';
1050Sigor@sysoev.ru
1060Sigor@sysoev.ru (void) nxt_write_console(nxt_stderr, msg, p - msg);
1070Sigor@sysoev.ru
108*1817Svbart@nginx.com #if 0
109564Svbart@nginx.com if (level == NXT_LOG_ALERT) {
110704Sigor@sysoev.ru *(p - nxt_length("\n")) = '\0';
1110Sigor@sysoev.ru
1120Sigor@sysoev.ru /*
1130Sigor@sysoev.ru * Syslog LOG_ALERT level is enough, because
1140Sigor@sysoev.ru * LOG_EMERG level broadcast a message to all users.
1150Sigor@sysoev.ru */
1160Sigor@sysoev.ru nxt_write_syslog(LOG_ALERT, syslogmsg);
1170Sigor@sysoev.ru }
118*1817Svbart@nginx.com #endif
1190Sigor@sysoev.ru }
120