xref: /unit/src/nxt_log.c (revision 1817:5bf7ec778c86)
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