annotate src/core/ngx_syslog.c @ 9270:3d455e37abf8 default tip

Core: PID file writing synchronization. Now, ngx_daemon() does not call exit() in the parent process immediately, but instead waits for the child process to signal it actually started (and wrote the PID file if configured to). This ensures that the PID file already exists when the parent process exits. To make sure that signal handlers won't cause unexpected logging in the parent process if the child process dies (for example, due to errors when writing the PID file), ngx_init_signals() is moved to the child process. This resolves "PID file ... not readable (yet?) after start" and "Failed to parse PID from file..." errors as observed with systemd. Note that the errors observed are considered to be a bug in systemd, which isn't able to work properly with traditional Unix daemons. Still, the workaround is implemented to make sure there will be no OS vendor patches trying to address this.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 13 May 2024 06:13:22 +0300
parents c769217b4a5c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 /*
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 */
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 #include <ngx_config.h>
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 #include <ngx_core.h>
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9 #include <ngx_event.h>
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12 #define NGX_SYSLOG_MAX_STR \
6474
Ruslan Ermilov <ru@nginx.com>
parents: 6286
diff changeset
13 NGX_MAX_ERROR_STR + sizeof("<255>Jan 01 00:00:00 ") - 1 \
Ruslan Ermilov <ru@nginx.com>
parents: 6286
diff changeset
14 + (NGX_MAXHOSTNAMELEN - 1) + 1 /* space */ \
Ruslan Ermilov <ru@nginx.com>
parents: 6286
diff changeset
15 + 32 /* tag */ + 2 /* colon, space */
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
16
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
17
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
18 static char *ngx_syslog_parse_args(ngx_conf_t *cf, ngx_syslog_peer_t *peer);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
19 static ngx_int_t ngx_syslog_init_peer(ngx_syslog_peer_t *peer);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
20 static void ngx_syslog_cleanup(void *data);
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
21 static u_char *ngx_syslog_log_error(ngx_log_t *log, u_char *buf, size_t len);
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
22
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24 static char *facilities[] = {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25 "kern", "user", "mail", "daemon", "auth", "intern", "lpr", "news", "uucp",
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26 "clock", "authpriv", "ftp", "ntp", "audit", "alert", "cron", "local0",
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27 "local1", "local2", "local3", "local4", "local5", "local6", "local7",
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28 NULL
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 };
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 /* note 'error/warn' like in nginx.conf, not 'err/warning' */
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32 static char *severities[] = {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33 "emerg", "alert", "crit", "error", "warn", "notice", "info", "debug", NULL
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
34 };
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
35
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36 static ngx_log_t ngx_syslog_dummy_log;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
37 static ngx_event_t ngx_syslog_dummy_event;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
40 char *
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
41 ngx_syslog_process_conf(ngx_conf_t *cf, ngx_syslog_peer_t *peer)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42 {
7277
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
43 ngx_pool_cleanup_t *cln;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
44
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
45 peer->facility = NGX_CONF_UNSET_UINT;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
46 peer->severity = NGX_CONF_UNSET_UINT;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
47
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
48 if (ngx_syslog_parse_args(cf, peer) != NGX_CONF_OK) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
49 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
50 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52 if (peer->server.sockaddr == NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54 "no syslog server specified");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
55 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
56 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
57
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
58 if (peer->facility == NGX_CONF_UNSET_UINT) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
59 peer->facility = 23; /* local7 */
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
60 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
61
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
62 if (peer->severity == NGX_CONF_UNSET_UINT) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
63 peer->severity = 6; /* info */
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
64 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
66 if (peer->tag.data == NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67 ngx_str_set(&peer->tag, "nginx");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
69
8149
29adacffdefa Syslog: removed usage of ngx_cycle->log and ngx_cycle->hostname.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7277
diff changeset
70 peer->hostname = &cf->cycle->hostname;
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
71 peer->logp = &cf->cycle->new_log;
8149
29adacffdefa Syslog: removed usage of ngx_cycle->log and ngx_cycle->hostname.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7277
diff changeset
72
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73 peer->conn.fd = (ngx_socket_t) -1;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
74
7277
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
75 peer->conn.read = &ngx_syslog_dummy_event;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
76 peer->conn.write = &ngx_syslog_dummy_event;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
77
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
78 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
79
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
80 cln = ngx_pool_cleanup_add(cf->pool, 0);
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
81 if (cln == NULL) {
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
82 return NGX_CONF_ERROR;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
83 }
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
84
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
85 cln->data = peer;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
86 cln->handler = ngx_syslog_cleanup;
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
87
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
88 return NGX_CONF_OK;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
89 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92 static char *
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93 ngx_syslog_parse_args(ngx_conf_t *cf, ngx_syslog_peer_t *peer)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95 u_char *p, *comma, c;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
96 size_t len;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 ngx_str_t *value;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98 ngx_url_t u;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99 ngx_uint_t i;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
100
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
101 value = cf->args->elts;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103 p = value[1].data + sizeof("syslog:") - 1;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 for ( ;; ) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
106 comma = (u_char *) ngx_strchr(p, ',');
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
107
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
108 if (comma != NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109 len = comma - p;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
110 *comma = '\0';
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
111
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112 } else {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113 len = value[1].data + value[1].len - p;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
115
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
116 if (ngx_strncmp(p, "server=", 7) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
117
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
118 if (peer->server.sockaddr != NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
120 "duplicate syslog \"server\"");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
121 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
122 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
123
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124 ngx_memzero(&u, sizeof(ngx_url_t));
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
126 u.url.data = p + 7;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127 u.url.len = len - 7;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 u.default_port = 514;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130 if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 if (u.err) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133 "%s in syslog server \"%V\"",
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134 u.err, &u.url);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140 peer->server = u.addrs[0];
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 } else if (ngx_strncmp(p, "facility=", 9) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144 if (peer->facility != NGX_CONF_UNSET_UINT) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
146 "duplicate syslog \"facility\"");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
147 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
148 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
149
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150 for (i = 0; facilities[i] != NULL; i++) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152 if (ngx_strcmp(p + 9, facilities[i]) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
153 peer->facility = i;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
154 goto next;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 "unknown syslog facility \"%s\"", p + 9);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162 } else if (ngx_strncmp(p, "severity=", 9) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164 if (peer->severity != NGX_CONF_UNSET_UINT) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 "duplicate syslog \"severity\"");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
170 for (i = 0; severities[i] != NULL; i++) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
171
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
172 if (ngx_strcmp(p + 9, severities[i]) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
173 peer->severity = i;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
174 goto next;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
175 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
176 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
177
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
178 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
179 "unknown syslog severity \"%s\"", p + 9);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
180 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
181
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182 } else if (ngx_strncmp(p, "tag=", 4) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184 if (peer->tag.data != NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 "duplicate syslog \"tag\"");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190 /*
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 * RFC 3164: the TAG is a string of ABNF alphanumeric characters
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 * that MUST NOT exceed 32 characters.
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 */
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 if (len - 4 > 32) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196 "syslog tag length exceeds 32");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
198 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
200 for (i = 4; i < len; i++) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
201 c = ngx_tolower(p[i]);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
202
5922
68f64bc17fa4 Syslog: allowed underscore symbol in tag (ticket #667).
Vladimir Homutov <vl@nginx.com>
parents: 5858
diff changeset
203 if (c < '0' || (c > '9' && c < 'a' && c != '_') || c > 'z') {
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
204 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
205 "syslog \"tag\" only allows "
5922
68f64bc17fa4 Syslog: allowed underscore symbol in tag (ticket #667).
Vladimir Homutov <vl@nginx.com>
parents: 5858
diff changeset
206 "alphanumeric characters "
68f64bc17fa4 Syslog: allowed underscore symbol in tag (ticket #667).
Vladimir Homutov <vl@nginx.com>
parents: 5858
diff changeset
207 "and underscore");
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
208 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212 peer->tag.data = p + 4;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213 peer->tag.len = len - 4;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214
6286
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
215 } else if (len == 10 && ngx_strncmp(p, "nohostname", 10) == 0) {
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
216 peer->nohostname = 1;
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
217
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 } else {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
219 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 "unknown syslog parameter \"%s\"", p);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224 next:
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 if (comma == NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227 break;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230 p = comma + 1;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
231 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
232
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
233 return NGX_CONF_OK;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 u_char *
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238 ngx_syslog_add_header(ngx_syslog_peer_t *peer, u_char *buf)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
239 {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240 ngx_uint_t pri;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
242 pri = peer->facility * 8 + peer->severity;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
243
6286
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
244 if (peer->nohostname) {
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
245 return ngx_sprintf(buf, "<%ui>%V %V: ", pri, &ngx_cached_syslog_time,
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
246 &peer->tag);
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
247 }
a6a2016b8e31 Syslog: added "nohostname" option.
Vladimir Homutov <vl@nginx.com>
parents: 5922
diff changeset
248
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249 return ngx_sprintf(buf, "<%ui>%V %V %V: ", pri, &ngx_cached_syslog_time,
8149
29adacffdefa Syslog: removed usage of ngx_cycle->log and ngx_cycle->hostname.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7277
diff changeset
250 peer->hostname, &peer->tag);
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
251 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254 void
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255 ngx_syslog_writer(ngx_log_t *log, ngx_uint_t level, u_char *buf,
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
256 size_t len)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
257 {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258 u_char *p, msg[NGX_SYSLOG_MAX_STR];
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 ngx_uint_t head_len;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
260 ngx_syslog_peer_t *peer;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
261
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
262 peer = log->wdata;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263
5857
2cb5275bf5e7 Syslog: enabled logging of send errors.
Vladimir Homutov <vl@nginx.com>
parents: 5709
diff changeset
264 if (peer->busy) {
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 return;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
266 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
267
5857
2cb5275bf5e7 Syslog: enabled logging of send errors.
Vladimir Homutov <vl@nginx.com>
parents: 5709
diff changeset
268 peer->busy = 1;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
269 peer->severity = level - 1;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
270
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
271 p = ngx_syslog_add_header(peer, msg);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
272 head_len = p - msg;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
273
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
274 len -= NGX_LINEFEED_SIZE;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
275
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
276 if (len > NGX_SYSLOG_MAX_STR - head_len) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277 len = NGX_SYSLOG_MAX_STR - head_len;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
278 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
279
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
280 p = ngx_snprintf(p, len, "%s", buf);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
281
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
282 (void) ngx_syslog_send(peer, msg, p - msg);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
283
5857
2cb5275bf5e7 Syslog: enabled logging of send errors.
Vladimir Homutov <vl@nginx.com>
parents: 5709
diff changeset
284 peer->busy = 0;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
285 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
286
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
287
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
288 ssize_t
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
289 ngx_syslog_send(ngx_syslog_peer_t *peer, u_char *buf, size_t len)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
290 {
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
291 ssize_t n;
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
292
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
293 if (peer->log.handler == NULL) {
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
294 peer->log = *peer->logp;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
295 peer->log.handler = ngx_syslog_log_error;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
296 peer->log.data = peer;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
297 peer->log.action = "logging to syslog";
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
298 }
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
299
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
300 if (peer->conn.fd == (ngx_socket_t) -1) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
301 if (ngx_syslog_init_peer(peer) != NGX_OK) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
302 return NGX_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
303 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
304 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
305
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
306 if (ngx_time() == peer->error_log_time) {
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
307 peer->conn.log_error = NGX_ERROR_DEBUG;
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
308 }
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
309
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
310 if (ngx_send) {
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
311 n = ngx_send(&peer->conn, buf, len);
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
312
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
313 } else {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
314 /* event module has not yet set ngx_io */
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
315 n = ngx_os_io.send(&peer->conn, buf, len);
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
316 }
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
317
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
318 if (n == NGX_ERROR
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
319 && peer->conn.log_error != NGX_ERROR_DEBUG)
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
320 {
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
321 if (ngx_close_socket(peer->conn.fd) == -1) {
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
322 ngx_log_error(NGX_LOG_ALERT, &peer->log, ngx_socket_errno,
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
323 ngx_close_socket_n " failed");
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
324 }
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
325
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
326 peer->conn.fd = (ngx_socket_t) -1;
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
327 peer->error_log_time = ngx_time();
9224
c7c8354f99fa Syslog: fixed duplicate errors with access logging to syslog.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8150
diff changeset
328
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
329 } else if ((size_t) n != len
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
330 && peer->conn.log_error != NGX_ERROR_DEBUG)
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
331 {
9224
c7c8354f99fa Syslog: fixed duplicate errors with access logging to syslog.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8150
diff changeset
332 ngx_log_error(NGX_LOG_CRIT, &peer->log, 0,
c7c8354f99fa Syslog: fixed duplicate errors with access logging to syslog.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8150
diff changeset
333 "send() incomplete");
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
334 peer->error_log_time = ngx_time();
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
335 }
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
336
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
337 peer->conn.log_error = NGX_ERROR_ERR;
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
338
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
339 return n;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
340 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
341
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
342
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
343 static ngx_int_t
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
344 ngx_syslog_init_peer(ngx_syslog_peer_t *peer)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
345 {
7277
7f9935f07fe9 Syslog: install cleanup handler only once.
Vladimir Homutov <vl@nginx.com>
parents: 7272
diff changeset
346 ngx_socket_t fd;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
347
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
348 if (ngx_time() == peer->connect_error_time) {
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
349 return NGX_ERROR;
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
350 }
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
351
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
352 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
353 if (fd == (ngx_socket_t) -1) {
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
354 ngx_log_error(NGX_LOG_ALERT, &peer->log, ngx_socket_errno,
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
355 ngx_socket_n " failed");
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
356 peer->connect_error_time = ngx_time();
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
357 return NGX_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
358 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
359
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
360 if (ngx_nonblocking(fd) == -1) {
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
361 ngx_log_error(NGX_LOG_ALERT, &peer->log, ngx_socket_errno,
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
362 ngx_nonblocking_n " failed");
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
363 goto failed;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
364 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
365
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
366 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) {
9226
c769217b4a5c Syslog: logging level of connect() errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9225
diff changeset
367 ngx_log_error(NGX_LOG_CRIT, &peer->log, ngx_socket_errno,
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
368 "connect() failed");
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
369 goto failed;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
370 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
371
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
372 peer->conn.fd = fd;
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
373 peer->conn.log = &peer->log;
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
374 peer->conn.log_error = NGX_ERROR_ERR;
5709
44532046d9d7 Syslog: fixed message sending on win32.
Vladimir Homutov <vl@nginx.com>
parents: 5708
diff changeset
375
44532046d9d7 Syslog: fixed message sending on win32.
Vladimir Homutov <vl@nginx.com>
parents: 5708
diff changeset
376 /* UDP sockets are always ready to write */
44532046d9d7 Syslog: fixed message sending on win32.
Vladimir Homutov <vl@nginx.com>
parents: 5708
diff changeset
377 peer->conn.write->ready = 1;
44532046d9d7 Syslog: fixed message sending on win32.
Vladimir Homutov <vl@nginx.com>
parents: 5708
diff changeset
378
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
379 return NGX_OK;
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
380
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
381 failed:
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
382
9225
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
383 peer->connect_error_time = ngx_time();
1c9264603adc Syslog: introduced ngx_syslog_send() error logging moderation.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9224
diff changeset
384
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
385 if (ngx_close_socket(fd) == -1) {
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
386 ngx_log_error(NGX_LOG_ALERT, &peer->log, ngx_socket_errno,
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
387 ngx_close_socket_n " failed");
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
388 }
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
389
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
390 return NGX_ERROR;
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
391 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
392
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
393
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
394 static void
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
395 ngx_syslog_cleanup(void *data)
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
396 {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
397 ngx_syslog_peer_t *peer = data;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
398
5857
2cb5275bf5e7 Syslog: enabled logging of send errors.
Vladimir Homutov <vl@nginx.com>
parents: 5709
diff changeset
399 /* prevents further use of this peer */
2cb5275bf5e7 Syslog: enabled logging of send errors.
Vladimir Homutov <vl@nginx.com>
parents: 5709
diff changeset
400 peer->busy = 1;
2cb5275bf5e7 Syslog: enabled logging of send errors.
Vladimir Homutov <vl@nginx.com>
parents: 5709
diff changeset
401
5858
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
402 if (peer->conn.fd == (ngx_socket_t) -1) {
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
403 return;
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
404 }
02c2352d5b01 Syslog: improved error handling of unix domain sockets.
Vladimir Homutov <vl@nginx.com>
parents: 5857
diff changeset
405
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
406 if (ngx_close_socket(peer->conn.fd) == -1) {
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
407 ngx_log_error(NGX_LOG_ALERT, &peer->log, ngx_socket_errno,
5708
aacd994167d3 Syslog: fixed possible resource leak and more verbose logging.
Vladimir Homutov <vl@nginx.com>
parents: 5702
diff changeset
408 ngx_close_socket_n " failed");
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
409 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
410 }
8150
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
411
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
412
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
413 static u_char *
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
414 ngx_syslog_log_error(ngx_log_t *log, u_char *buf, size_t len)
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
415 {
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
416 u_char *p;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
417 ngx_syslog_peer_t *peer;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
418
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
419 p = buf;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
420
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
421 if (log->action) {
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
422 p = ngx_snprintf(buf, len, " while %s", log->action);
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
423 len -= p - buf;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
424 }
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
425
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
426 peer = log->data;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
427
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
428 if (peer) {
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
429 p = ngx_snprintf(p, len, ", server: %V", &peer->server.name);
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
430 }
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
431
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
432 return p;
8771d35d55d0 Syslog: introduced error log handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8149
diff changeset
433 }