annotate src/stream/ngx_stream_log_module.c @ 6927:c36d160cd4e0

Access log: removed dead ev->timedout check in flush timer handler. The ev->timedout flag is set on first timer expiration, and never reset after it. Due to this the code to stop the timer when the timer was canceled never worked (except in a very specific time frame immediately after start), and the timer was always armed again. This essentially resulted in a buffer flush at the end of an event loop iteration. This behaviour actually seems to be better than just stopping the flush timer for the whole shutdown, so it is preserved as is instead of fixing the code to actually remove the timer. It will be further improved by upcoming changes to preserve cancelable timers if there are other timers blocking shutdown.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 07 Mar 2017 18:51:12 +0300
parents 0cf4e82e7c48
children 3fb9b5eb75c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 427
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 427
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4327
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 427
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 427
diff changeset
6
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
10 #include <ngx_stream.h>
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
12 #if (NGX_ZLIB)
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
13 #include <zlib.h>
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
14 #endif
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
15
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
17 typedef struct ngx_stream_log_op_s ngx_stream_log_op_t;
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
18
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
19 typedef u_char *(*ngx_stream_log_op_run_pt) (ngx_stream_session_t *s,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
20 u_char *buf, ngx_stream_log_op_t *op);
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
21
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
22 typedef size_t (*ngx_stream_log_op_getlen_pt) (ngx_stream_session_t *s,
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
23 uintptr_t data);
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
24
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
25
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
26 struct ngx_stream_log_op_s {
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
27 size_t len;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
28 ngx_stream_log_op_getlen_pt getlen;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
29 ngx_stream_log_op_run_pt run;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
30 uintptr_t data;
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
31 };
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
32
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
33
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
34 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
35 ngx_str_t name;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
36 ngx_array_t *flushes;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
37 ngx_array_t *ops; /* array of ngx_stream_log_op_t */
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
38 } ngx_stream_log_fmt_t;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
39
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
40
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
41 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
42 ngx_array_t formats; /* array of ngx_stream_log_fmt_t */
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
43 } ngx_stream_log_main_conf_t;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
44
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
45
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
46 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
47 u_char *start;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
48 u_char *pos;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
49 u_char *last;
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
50
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
51 ngx_event_t *event;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
52 ngx_msec_t flush;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
53 ngx_int_t gzip;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
54 } ngx_stream_log_buf_t;
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
55
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
56
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
57 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
58 ngx_array_t *lengths;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
59 ngx_array_t *values;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
60 } ngx_stream_log_script_t;
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
61
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
62
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
63 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
64 ngx_open_file_t *file;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
65 ngx_stream_log_script_t *script;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
66 time_t disk_full_time;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
67 time_t error_log_time;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
68 ngx_syslog_peer_t *syslog_peer;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
69 ngx_stream_log_fmt_t *format;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
70 ngx_stream_complex_value_t *filter;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
71 } ngx_stream_log_t;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
72
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 645
diff changeset
73
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
74 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
75 ngx_array_t *logs; /* array of ngx_stream_log_t */
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
76
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
77 ngx_open_file_cache_t *open_file_cache;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
78 time_t open_file_cache_valid;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
79 ngx_uint_t open_file_cache_min_uses;
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
80
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
81 ngx_uint_t off; /* unsigned off:1 */
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
82 } ngx_stream_log_srv_conf_t;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
83
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
84
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
85 typedef struct {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
86 ngx_str_t name;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
87 size_t len;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
88 ngx_stream_log_op_run_pt run;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
89 } ngx_stream_log_var_t;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
90
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
91
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
92 static void ngx_stream_log_write(ngx_stream_session_t *s, ngx_stream_log_t *log,
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
93 u_char *buf, size_t len);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
94 static ssize_t ngx_stream_log_script_write(ngx_stream_session_t *s,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
95 ngx_stream_log_script_t *script, u_char **name, u_char *buf, size_t len);
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
96
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
97 #if (NGX_ZLIB)
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
98 static ssize_t ngx_stream_log_gzip(ngx_fd_t fd, u_char *buf, size_t len,
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
99 ngx_int_t level, ngx_log_t *log);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
100
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
101 static void *ngx_stream_log_gzip_alloc(void *opaque, u_int items, u_int size);
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
102 static void ngx_stream_log_gzip_free(void *opaque, void *address);
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
103 #endif
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
104
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
105 static void ngx_stream_log_flush(ngx_open_file_t *file, ngx_log_t *log);
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
106 static void ngx_stream_log_flush_handler(ngx_event_t *ev);
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
107
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
108 static ngx_int_t ngx_stream_log_variable_compile(ngx_conf_t *cf,
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
109 ngx_stream_log_op_t *op, ngx_str_t *value, ngx_uint_t json);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
110 static size_t ngx_stream_log_variable_getlen(ngx_stream_session_t *s,
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
111 uintptr_t data);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
112 static u_char *ngx_stream_log_variable(ngx_stream_session_t *s, u_char *buf,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
113 ngx_stream_log_op_t *op);
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
114 static uintptr_t ngx_stream_log_escape(u_char *dst, u_char *src, size_t size);
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
115 static size_t ngx_stream_log_json_variable_getlen(ngx_stream_session_t *s,
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
116 uintptr_t data);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
117 static u_char *ngx_stream_log_json_variable(ngx_stream_session_t *s,
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
118 u_char *buf, ngx_stream_log_op_t *op);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
119
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
120
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
121 static void *ngx_stream_log_create_main_conf(ngx_conf_t *cf);
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
122 static void *ngx_stream_log_create_srv_conf(ngx_conf_t *cf);
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
123 static char *ngx_stream_log_merge_srv_conf(ngx_conf_t *cf, void *parent,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
124 void *child);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
125 static char *ngx_stream_log_set_log(ngx_conf_t *cf, ngx_command_t *cmd,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
126 void *conf);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
127 static char *ngx_stream_log_set_format(ngx_conf_t *cf, ngx_command_t *cmd,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
128 void *conf);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
129 static char *ngx_stream_log_compile_format(ngx_conf_t *cf,
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
130 ngx_array_t *flushes, ngx_array_t *ops, ngx_array_t *args, ngx_uint_t s);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
131 static char *ngx_stream_log_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
132 void *conf);
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
133 static ngx_int_t ngx_stream_log_init(ngx_conf_t *cf);
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
134
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
135
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
136 static ngx_command_t ngx_stream_log_commands[] = {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
137
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
138 { ngx_string("log_format"),
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
139 NGX_STREAM_MAIN_CONF|NGX_CONF_2MORE,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
140 ngx_stream_log_set_format,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
141 NGX_STREAM_MAIN_CONF_OFFSET,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
142 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
143 NULL },
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
144
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
145 { ngx_string("access_log"),
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
146 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_1MORE,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
147 ngx_stream_log_set_log,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
148 NGX_STREAM_SRV_CONF_OFFSET,
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
149 0,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
150 NULL },
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
151
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
152 { ngx_string("open_log_file_cache"),
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
153 NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1234,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
154 ngx_stream_log_open_file_cache,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
155 NGX_STREAM_SRV_CONF_OFFSET,
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
156 0,
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
157 NULL },
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
158
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
159 ngx_null_command
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
160 };
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
161
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
162
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
163 static ngx_stream_module_t ngx_stream_log_module_ctx = {
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
164 NULL, /* preconfiguration */
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
165 ngx_stream_log_init, /* postconfiguration */
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
166
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
167 ngx_stream_log_create_main_conf, /* create main configuration */
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
168 NULL, /* init main configuration */
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
169
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
170 ngx_stream_log_create_srv_conf, /* create server configuration */
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
171 ngx_stream_log_merge_srv_conf /* merge server configuration */
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
172 };
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
173
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
174
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
175 ngx_module_t ngx_stream_log_module = {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
176 NGX_MODULE_V1,
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
177 &ngx_stream_log_module_ctx, /* module context */
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
178 ngx_stream_log_commands, /* module directives */
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
179 NGX_STREAM_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
180 NULL, /* init master */
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
181 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
182 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
183 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
184 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
185 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
186 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
187 NGX_MODULE_V1_PADDING
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
188 };
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
189
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
191 static ngx_int_t
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
192 ngx_stream_log_handler(ngx_stream_session_t *s)
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
193 {
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
194 u_char *line, *p;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
195 size_t len, size;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
196 ssize_t n;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
197 ngx_str_t val;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
198 ngx_uint_t i, l;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
199 ngx_stream_log_t *log;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
200 ngx_stream_log_op_t *op;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
201 ngx_stream_log_buf_t *buffer;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
202 ngx_stream_log_srv_conf_t *lscf;
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
204 ngx_log_debug0(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
205 "stream log handler");
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
206
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
207 lscf = ngx_stream_get_module_srv_conf(s, ngx_stream_log_module);
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
209 if (lscf->off || lscf->logs == NULL) {
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
210 return NGX_OK;
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
211 }
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
212
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
213 log = lscf->logs->elts;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
214 for (l = 0; l < lscf->logs->nelts; l++) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
215
5653
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
216 if (log[l].filter) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
217 if (ngx_stream_complex_value(s, log[l].filter, &val) != NGX_OK) {
5653
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
218 return NGX_ERROR;
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
219 }
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
220
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
221 if (val.len == 0 || (val.len == 1 && val.data[0] == '0')) {
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
222 continue;
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
223 }
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
224 }
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
225
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
226 if (ngx_time() == log[l].disk_full_time) {
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
227
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
228 /*
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
229 * on FreeBSD writing to a full filesystem with enabled softupdates
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
230 * may block process for much longer time than writing to non-full
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
231 * filesystem, so we skip writing to a log for one second
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
232 */
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
233
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
234 continue;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
235 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
236
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
237 ngx_stream_script_flush_no_cacheable_variables(s,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
238 log[l].format->flushes);
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
239
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
240 len = 0;
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
241 op = log[l].format->ops->elts;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
242 for (i = 0; i < log[l].format->ops->nelts; i++) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
243 if (op[i].len == 0) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
244 len += op[i].getlen(s, op[i].data);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
245
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
246 } else {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
247 len += op[i].len;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
248 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
249 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
250
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
251 if (log[l].syslog_peer) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
252
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
253 /* length of syslog's PRI and HEADER message parts */
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
254 len += sizeof("<255>Jan 01 00:00:00 ") - 1
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
255 + ngx_cycle->hostname.len + 1
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
256 + log[l].syslog_peer->tag.len + 2;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
257
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
258 goto alloc_line;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
259 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
260
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
261 len += NGX_LINEFEED_SIZE;
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
262
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
263 buffer = log[l].file ? log[l].file->data : NULL;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
264
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
265 if (buffer) {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
266
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
267 if (len > (size_t) (buffer->last - buffer->pos)) {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
268
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
269 ngx_stream_log_write(s, &log[l], buffer->start,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
270 buffer->pos - buffer->start);
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
271
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
272 buffer->pos = buffer->start;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
273 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
274
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
275 if (len <= (size_t) (buffer->last - buffer->pos)) {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
276
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
277 p = buffer->pos;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
278
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
279 if (buffer->event && p == buffer->start) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
280 ngx_add_timer(buffer->event, buffer->flush);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
281 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
282
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
283 for (i = 0; i < log[l].format->ops->nelts; i++) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
284 p = op[i].run(s, p, &op[i]);
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
285 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
286
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
287 ngx_linefeed(p);
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
288
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
289 buffer->pos = p;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
290
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
291 continue;
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
292 }
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
293
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
294 if (buffer->event && buffer->event->timer_set) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
295 ngx_del_timer(buffer->event);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
296 }
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
297 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
299 alloc_line:
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
300
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
301 line = ngx_pnalloc(s->connection->pool, len);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
302 if (line == NULL) {
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
303 return NGX_ERROR;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
304 }
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
305
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
306 p = line;
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
308 if (log[l].syslog_peer) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
309 p = ngx_syslog_add_header(log[l].syslog_peer, line);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
310 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
311
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
312 for (i = 0; i < log[l].format->ops->nelts; i++) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
313 p = op[i].run(s, p, &op[i]);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
314 }
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
315
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
316 if (log[l].syslog_peer) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
317
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
318 size = p - line;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
319
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
320 n = ngx_syslog_send(log[l].syslog_peer, line, size);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
321
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
322 if (n < 0) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
323 ngx_log_error(NGX_LOG_WARN, s->connection->log, 0,
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
324 "send() to syslog failed");
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
325
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
326 } else if ((size_t) n != size) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
327 ngx_log_error(NGX_LOG_WARN, s->connection->log, 0,
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
328 "send() to syslog has written only %z of %uz",
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
329 n, size);
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
330 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
331
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
332 continue;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
333 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
334
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
335 ngx_linefeed(p);
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
336
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
337 ngx_stream_log_write(s, &log[l], line, p - line);
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
338 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340 return NGX_OK;
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341 }
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
342
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
343
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
344 static void
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
345 ngx_stream_log_write(ngx_stream_session_t *s, ngx_stream_log_t *log,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
346 u_char *buf, size_t len)
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
347 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
348 u_char *name;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
349 time_t now;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
350 ssize_t n;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
351 ngx_err_t err;
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
352 #if (NGX_ZLIB)
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
353 ngx_stream_log_buf_t *buffer;
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
354 #endif
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
355
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
356 if (log->script == NULL) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
357 name = log->file->name.data;
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
358
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
359 #if (NGX_ZLIB)
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
360 buffer = log->file->data;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
361
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
362 if (buffer && buffer->gzip) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
363 n = ngx_stream_log_gzip(log->file->fd, buf, len, buffer->gzip,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
364 s->connection->log);
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
365 } else {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
366 n = ngx_write_fd(log->file->fd, buf, len);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
367 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
368 #else
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
369 n = ngx_write_fd(log->file->fd, buf, len);
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
370 #endif
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
371
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
372 } else {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
373 name = NULL;
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
374 n = ngx_stream_log_script_write(s, log->script, &name, buf, len);
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
375 }
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
376
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
377 if (n == (ssize_t) len) {
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
378 return;
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
379 }
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
380
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
381 now = ngx_time();
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
382
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
383 if (n == -1) {
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
384 err = ngx_errno;
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
385
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
386 if (err == NGX_ENOSPC) {
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
387 log->disk_full_time = now;
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
388 }
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
389
1161
6002e0253221 use 60 seconds interval but not 61 seconds
Igor Sysoev <igor@sysoev.ru>
parents: 1074
diff changeset
390 if (now - log->error_log_time > 59) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
391 ngx_log_error(NGX_LOG_ALERT, s->connection->log, err,
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
392 ngx_write_fd_n " to \"%s\" failed", name);
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
393
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
394 log->error_log_time = now;
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
395 }
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
396
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
397 return;
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
398 }
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
399
1161
6002e0253221 use 60 seconds interval but not 61 seconds
Igor Sysoev <igor@sysoev.ru>
parents: 1074
diff changeset
400 if (now - log->error_log_time > 59) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
401 ngx_log_error(NGX_LOG_ALERT, s->connection->log, 0,
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
402 ngx_write_fd_n " to \"%s\" was incomplete: %z of %uz",
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
403 name, n, len);
1071
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
404
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
405 log->error_log_time = now;
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
406 }
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
407 }
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
408
bd4202f92581 log a failure of the writing to access_log once per minute
Igor Sysoev <igor@sysoev.ru>
parents: 905
diff changeset
409
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
410 static ssize_t
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
411 ngx_stream_log_script_write(ngx_stream_session_t *s,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
412 ngx_stream_log_script_t *script, u_char **name, u_char *buf, size_t len)
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
413 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
414 ssize_t n;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
415 ngx_str_t log;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
416 ngx_open_file_info_t of;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
417 ngx_stream_log_srv_conf_t *lscf;
4494
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
418
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
419 if (ngx_stream_script_run(s, &log, script->lengths->elts, 1,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
420 script->values->elts)
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
421 == NULL)
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
422 {
4499
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4494
diff changeset
423 /* simulate successful logging */
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
424 return len;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
425 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
426
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
427 log.data[log.len - 1] = '\0';
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
428 *name = log.data;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
429
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
430 ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
431 "stream log \"%s\"", log.data);
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
432
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
433 lscf = ngx_stream_get_module_srv_conf(s, ngx_stream_log_module);
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
434
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
435 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
436
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
437 of.log = 1;
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
438 of.valid = lscf->open_file_cache_valid;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
439 of.min_uses = lscf->open_file_cache_min_uses;
2277
732bf367dc08 NGX_OPEN_FILE_DIRECTIO_OFF
Igor Sysoev <igor@sysoev.ru>
parents: 2261
diff changeset
440 of.directio = NGX_OPEN_FILE_DIRECTIO_OFF;
4494
13e09cf11d4e Disable symlinks: initialization of the "disable_symlinks" field in
Valentin Bartenev <vbart@nginx.com>
parents: 4478
diff changeset
441
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
442 if (ngx_open_cached_file(lscf->open_file_cache, &log, &of,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
443 s->connection->pool)
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
444 != NGX_OK)
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
445 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
446 ngx_log_error(NGX_LOG_CRIT, s->connection->log, ngx_errno,
2756
09cab3f8d92e *) of.test_only to not open file if only stat() is enough
Igor Sysoev <igor@sysoev.ru>
parents: 2536
diff changeset
447 "%s \"%s\" failed", of.failed, log.data);
4499
778ef9c3fd2d Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents: 4494
diff changeset
448 /* simulate successful logging */
2077
479440385e35 fix error message
Igor Sysoev <igor@sysoev.ru>
parents: 2072
diff changeset
449 return len;
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
450 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
451
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
452 ngx_log_debug1(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
453 "stream log #%d", of.fd);
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
454
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
455 n = ngx_write_fd(of.fd, buf, len);
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
456
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
457 return n;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
458 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
459
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
460
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
461 #if (NGX_ZLIB)
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
462
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
463 static ssize_t
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
464 ngx_stream_log_gzip(ngx_fd_t fd, u_char *buf, size_t len, ngx_int_t level,
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
465 ngx_log_t *log)
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
466 {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
467 int rc, wbits, memlevel;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
468 u_char *out;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
469 size_t size;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
470 ssize_t n;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
471 z_stream zstream;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
472 ngx_err_t err;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
473 ngx_pool_t *pool;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
474
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
475 wbits = MAX_WBITS;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
476 memlevel = MAX_MEM_LEVEL - 1;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
477
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
478 while ((ssize_t) len < ((1 << (wbits - 1)) - 262)) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
479 wbits--;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
480 memlevel--;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
481 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
482
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
483 /*
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
484 * This is a formula from deflateBound() for conservative upper bound of
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
485 * compressed data plus 18 bytes of gzip wrapper.
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
486 */
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
487
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
488 size = len + ((len + 7) >> 3) + ((len + 63) >> 6) + 5 + 18;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
489
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
490 ngx_memzero(&zstream, sizeof(z_stream));
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
491
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
492 pool = ngx_create_pool(256, log);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
493 if (pool == NULL) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
494 /* simulate successful logging */
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
495 return len;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
496 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
497
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
498 pool->log = log;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
499
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
500 zstream.zalloc = ngx_stream_log_gzip_alloc;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
501 zstream.zfree = ngx_stream_log_gzip_free;
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
502 zstream.opaque = pool;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
503
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
504 out = ngx_pnalloc(pool, size);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
505 if (out == NULL) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
506 goto done;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
507 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
508
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
509 zstream.next_in = buf;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
510 zstream.avail_in = len;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
511 zstream.next_out = out;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
512 zstream.avail_out = size;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
513
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
514 rc = deflateInit2(&zstream, (int) level, Z_DEFLATED, wbits + 16, memlevel,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
515 Z_DEFAULT_STRATEGY);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
516
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
517 if (rc != Z_OK) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
518 ngx_log_error(NGX_LOG_ALERT, log, 0, "deflateInit2() failed: %d", rc);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
519 goto done;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
520 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
521
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
522 ngx_log_debug4(NGX_LOG_DEBUG_STREAM, log, 0,
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
523 "deflate in: ni:%p no:%p ai:%ud ao:%ud",
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
524 zstream.next_in, zstream.next_out,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
525 zstream.avail_in, zstream.avail_out);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
526
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
527 rc = deflate(&zstream, Z_FINISH);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
528
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
529 if (rc != Z_STREAM_END) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
530 ngx_log_error(NGX_LOG_ALERT, log, 0,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
531 "deflate(Z_FINISH) failed: %d", rc);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
532 goto done;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
533 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
534
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
535 ngx_log_debug5(NGX_LOG_DEBUG_STREAM, log, 0,
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
536 "deflate out: ni:%p no:%p ai:%ud ao:%ud rc:%d",
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
537 zstream.next_in, zstream.next_out,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
538 zstream.avail_in, zstream.avail_out,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
539 rc);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
540
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
541 size -= zstream.avail_out;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
542
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
543 rc = deflateEnd(&zstream);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
544
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
545 if (rc != Z_OK) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
546 ngx_log_error(NGX_LOG_ALERT, log, 0, "deflateEnd() failed: %d", rc);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
547 goto done;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
548 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
549
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
550 n = ngx_write_fd(fd, out, size);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
551
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
552 if (n != (ssize_t) size) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
553 err = (n == -1) ? ngx_errno : 0;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
554
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
555 ngx_destroy_pool(pool);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
556
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
557 ngx_set_errno(err);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
558 return -1;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
559 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
560
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
561 done:
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
562
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
563 ngx_destroy_pool(pool);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
564
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
565 /* simulate successful logging */
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
566 return len;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
567 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
568
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
569
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
570 static void *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
571 ngx_stream_log_gzip_alloc(void *opaque, u_int items, u_int size)
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
572 {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
573 ngx_pool_t *pool = opaque;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
574
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
575 ngx_log_debug2(NGX_LOG_DEBUG_STREAM, pool->log, 0,
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
576 "gzip alloc: n:%ud s:%ud", items, size);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
577
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
578 return ngx_palloc(pool, items * size);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
579 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
580
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
581
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
582 static void
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
583 ngx_stream_log_gzip_free(void *opaque, void *address)
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
584 {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
585 #if 0
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
586 ngx_pool_t *pool = opaque;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
587
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
588 ngx_log_debug1(NGX_LOG_DEBUG_STREAM, pool->log, 0,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
589 "gzip free: %p", address);
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
590 #endif
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
591 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
592
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
593 #endif
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
594
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
595
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
596 static void
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
597 ngx_stream_log_flush(ngx_open_file_t *file, ngx_log_t *log)
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
598 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
599 size_t len;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
600 ssize_t n;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
601 ngx_stream_log_buf_t *buffer;
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
602
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
603 buffer = file->data;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
604
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
605 len = buffer->pos - buffer->start;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
606
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
607 if (len == 0) {
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
608 return;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
609 }
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
610
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
611 #if (NGX_ZLIB)
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
612 if (buffer->gzip) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
613 n = ngx_stream_log_gzip(file->fd, buffer->start, len, buffer->gzip,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
614 log);
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
615 } else {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
616 n = ngx_write_fd(file->fd, buffer->start, len);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
617 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
618 #else
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
619 n = ngx_write_fd(file->fd, buffer->start, len);
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
620 #endif
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
621
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
622 if (n == -1) {
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
623 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
624 ngx_write_fd_n " to \"%s\" failed",
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
625 file->name.data);
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
626
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
627 } else if ((size_t) n != len) {
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
628 ngx_log_error(NGX_LOG_ALERT, log, 0,
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
629 ngx_write_fd_n " to \"%s\" was incomplete: %z of %uz",
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
630 file->name.data, n, len);
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
631 }
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
632
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
633 buffer->pos = buffer->start;
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
634
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
635 if (buffer->event && buffer->event->timer_set) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
636 ngx_del_timer(buffer->event);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
637 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
638 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
639
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
640
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
641 static void
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
642 ngx_stream_log_flush_handler(ngx_event_t *ev)
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
643 {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
644 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, 0,
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
645 "stream log buffer flush handler");
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
646
6927
c36d160cd4e0 Access log: removed dead ev->timedout check in flush timer handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6840
diff changeset
647 ngx_stream_log_flush(ev->data, ev->log);
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
648 }
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
649
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
650
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
651 static u_char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
652 ngx_stream_log_copy_short(ngx_stream_session_t *s, u_char *buf,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
653 ngx_stream_log_op_t *op)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
654 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
655 size_t len;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
656 uintptr_t data;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
657
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
658 len = op->len;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
659 data = op->data;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
660
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
661 while (len--) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
662 *buf++ = (u_char) (data & 0xff);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
663 data >>= 8;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
664 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
665
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
666 return buf;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
667 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
668
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
669
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
670 static u_char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
671 ngx_stream_log_copy_long(ngx_stream_session_t *s, u_char *buf,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
672 ngx_stream_log_op_t *op)
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
673 {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
674 return ngx_cpymem(buf, (u_char *) op->data, op->len);
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
675 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
676
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
677
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
678 static ngx_int_t
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
679 ngx_stream_log_variable_compile(ngx_conf_t *cf, ngx_stream_log_op_t *op,
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
680 ngx_str_t *value, ngx_uint_t json)
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
681 {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
682 ngx_int_t index;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
683
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
684 index = ngx_stream_get_variable_index(cf, value);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
685 if (index == NGX_ERROR) {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
686 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
687 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
688
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
689 op->len = 0;
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
690
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
691 if (json) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
692 op->getlen = ngx_stream_log_json_variable_getlen;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
693 op->run = ngx_stream_log_json_variable;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
694
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
695 } else {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
696 op->getlen = ngx_stream_log_variable_getlen;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
697 op->run = ngx_stream_log_variable;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
698 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
699
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
700 op->data = index;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
701
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
702 return NGX_OK;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
703 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
704
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
705
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
706 static size_t
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
707 ngx_stream_log_variable_getlen(ngx_stream_session_t *s, uintptr_t data)
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
708 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
709 uintptr_t len;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
710 ngx_stream_variable_value_t *value;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
711
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
712 value = ngx_stream_get_indexed_variable(s, data);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
713
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
714 if (value == NULL || value->not_found) {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
715 return 1;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
716 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
717
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
718 len = ngx_stream_log_escape(NULL, value->data, value->len);
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
719
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
720 value->escape = len ? 1 : 0;
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
721
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
722 return value->len + len * 3;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
723 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
724
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
725
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
726 static u_char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
727 ngx_stream_log_variable(ngx_stream_session_t *s, u_char *buf,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
728 ngx_stream_log_op_t *op)
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
729 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
730 ngx_stream_variable_value_t *value;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
731
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
732 value = ngx_stream_get_indexed_variable(s, op->data);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
733
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
734 if (value == NULL || value->not_found) {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
735 *buf = '-';
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
736 return buf + 1;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
737 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
738
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
739 if (value->escape == 0) {
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
740 return ngx_cpymem(buf, value->data, value->len);
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
741
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
742 } else {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
743 return (u_char *) ngx_stream_log_escape(buf, value->data, value->len);
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
744 }
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
745 }
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
746
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
747
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
748 static uintptr_t
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
749 ngx_stream_log_escape(u_char *dst, u_char *src, size_t size)
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
750 {
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
751 ngx_uint_t n;
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
752 static u_char hex[] = "0123456789ABCDEF";
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
753
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
754 static uint32_t escape[] = {
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
755 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
756
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
757 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
758 0x00000004, /* 0000 0000 0000 0000 0000 0000 0000 0100 */
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
759
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
760 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
761 0x10000000, /* 0001 0000 0000 0000 0000 0000 0000 0000 */
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
762
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
763 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
4191
08d8af70760c Improved access log escaping to better protect other software.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
764 0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
765
4191
08d8af70760c Improved access log escaping to better protect other software.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
766 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
08d8af70760c Improved access log escaping to better protect other software.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
767 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
08d8af70760c Improved access log escaping to better protect other software.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
768 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
08d8af70760c Improved access log escaping to better protect other software.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
769 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
770 };
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
771
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
772
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
773 if (dst == NULL) {
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
774
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
775 /* find the number of the characters to be escaped */
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
776
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3038
diff changeset
777 n = 0;
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
778
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
779 while (size) {
6626
b3682580c1bd Avoid left-shifting integers into the sign bit, which is undefined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5927
diff changeset
780 if (escape[*src >> 5] & (1U << (*src & 0x1f))) {
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
781 n++;
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
782 }
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
783 src++;
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
784 size--;
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
785 }
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
786
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
787 return (uintptr_t) n;
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
788 }
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
789
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
790 while (size) {
6626
b3682580c1bd Avoid left-shifting integers into the sign bit, which is undefined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5927
diff changeset
791 if (escape[*src >> 5] & (1U << (*src & 0x1f))) {
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
792 *dst++ = '\\';
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
793 *dst++ = 'x';
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
794 *dst++ = hex[*src >> 4];
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
795 *dst++ = hex[*src & 0xf];
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
796 src++;
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
797
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
798 } else {
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
799 *dst++ = *src++;
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
800 }
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
801 size--;
2008
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
802 }
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
803
66dc85397a90 escape 0x00-0x1f, ", and \ in access log variables
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
804 return (uintptr_t) dst;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
805 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
806
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
807
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
808 static size_t
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
809 ngx_stream_log_json_variable_getlen(ngx_stream_session_t *s, uintptr_t data)
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
810 {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
811 uintptr_t len;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
812 ngx_stream_variable_value_t *value;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
813
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
814 value = ngx_stream_get_indexed_variable(s, data);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
815
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
816 if (value == NULL || value->not_found) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
817 return 0;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
818 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
819
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
820 len = ngx_escape_json(NULL, value->data, value->len);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
821
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
822 value->escape = len ? 1 : 0;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
823
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
824 return value->len + len;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
825 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
826
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
827
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
828 static u_char *
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
829 ngx_stream_log_json_variable(ngx_stream_session_t *s, u_char *buf,
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
830 ngx_stream_log_op_t *op)
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
831 {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
832 ngx_stream_variable_value_t *value;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
833
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
834 value = ngx_stream_get_indexed_variable(s, op->data);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
835
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
836 if (value == NULL || value->not_found) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
837 return buf;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
838 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
839
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
840 if (value->escape == 0) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
841 return ngx_cpymem(buf, value->data, value->len);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
842
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
843 } else {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
844 return (u_char *) ngx_escape_json(buf, value->data, value->len);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
845 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
846 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
847
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
848
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
849 static void *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
850 ngx_stream_log_create_main_conf(ngx_conf_t *cf)
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
851 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
852 ngx_stream_log_main_conf_t *conf;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
853
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
854 conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_log_main_conf_t));
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
855 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
856 return NULL;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
857 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
858
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
859 if (ngx_array_init(&conf->formats, cf->pool, 4,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
860 sizeof(ngx_stream_log_fmt_t))
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
861 != NGX_OK)
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
862 {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
863 return NULL;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
864 }
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
865
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
866 return conf;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
867 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
868
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
869
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
870 static void *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
871 ngx_stream_log_create_srv_conf(ngx_conf_t *cf)
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
872 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
873 ngx_stream_log_srv_conf_t *conf;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
874
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
875 conf = ngx_pcalloc(cf->pool, sizeof(ngx_stream_log_srv_conf_t));
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
876 if (conf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2756
diff changeset
877 return NULL;
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
878 }
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
879
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
880 conf->open_file_cache = NGX_CONF_UNSET_PTR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
881
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
882 return conf;
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
883 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
884
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
885
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
886 static char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
887 ngx_stream_log_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
888 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
889 ngx_stream_log_srv_conf_t *prev = parent;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
890 ngx_stream_log_srv_conf_t *conf = child;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
891
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
892 if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
893
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
894 conf->open_file_cache = prev->open_file_cache;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
895 conf->open_file_cache_valid = prev->open_file_cache_valid;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
896 conf->open_file_cache_min_uses = prev->open_file_cache_min_uses;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
897
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
898 if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
899 conf->open_file_cache = NULL;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
900 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
901 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
902
1074
8164f479b362 fix "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 1071
diff changeset
903 if (conf->logs || conf->off) {
8164f479b362 fix "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 1071
diff changeset
904 return NGX_CONF_OK;
8164f479b362 fix "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 1071
diff changeset
905 }
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
906
2078
9acbc5e7bcbd fix variable access_log merging
Igor Sysoev <igor@sysoev.ru>
parents: 2077
diff changeset
907 conf->logs = prev->logs;
9acbc5e7bcbd fix variable access_log merging
Igor Sysoev <igor@sysoev.ru>
parents: 2077
diff changeset
908 conf->off = prev->off;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
909
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
910 return NGX_CONF_OK;
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
911 }
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
912
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
913
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
914 static char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
915 ngx_stream_log_set_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
916 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
917 ngx_stream_log_srv_conf_t *lscf = conf;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
918
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
919 ssize_t size;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
920 ngx_int_t gzip;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
921 ngx_uint_t i, n;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
922 ngx_msec_t flush;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
923 ngx_str_t *value, name, s;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
924 ngx_stream_log_t *log;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
925 ngx_syslog_peer_t *peer;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
926 ngx_stream_log_buf_t *buffer;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
927 ngx_stream_log_fmt_t *fmt;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
928 ngx_stream_script_compile_t sc;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
929 ngx_stream_log_main_conf_t *lmcf;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
930 ngx_stream_compile_complex_value_t ccv;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
931
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
932 value = cf->args->elts;
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
933
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
934 if (ngx_strcmp(value[1].data, "off") == 0) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
935 lscf->off = 1;
3038
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
936 if (cf->args->nelts == 2) {
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
937 return NGX_CONF_OK;
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
938 }
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
939
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
940 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
941 "invalid parameter \"%V\"", &value[2]);
cd8738e76610 strict testing "access_log off"
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
942 return NGX_CONF_ERROR;
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
943 }
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
944
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
945 if (lscf->logs == NULL) {
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
946 lscf->logs = ngx_array_create(cf->pool, 2, sizeof(ngx_stream_log_t));
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
947 if (lscf->logs == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
948 return NGX_CONF_ERROR;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
949 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
950 }
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
951
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
952 lmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_log_module);
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
953
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
954 log = ngx_array_push(lscf->logs);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
955 if (log == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
956 return NGX_CONF_ERROR;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
957 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
958
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
959 ngx_memzero(log, sizeof(ngx_stream_log_t));
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
960
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
961
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
962 if (ngx_strncmp(value[1].data, "syslog:", 7) == 0) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
963
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
964 peer = ngx_pcalloc(cf->pool, sizeof(ngx_syslog_peer_t));
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
965 if (peer == NULL) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
966 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
967 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
968
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
969 if (ngx_syslog_process_conf(cf, peer) != NGX_CONF_OK) {
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
970 return NGX_CONF_ERROR;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
971 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
972
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
973 log->syslog_peer = peer;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
974
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
975 goto process_formats;
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
976 }
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
977
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
978 n = ngx_stream_script_variables_count(&value[1]);
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
979
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
980 if (n == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
981 log->file = ngx_conf_open_file(cf->cycle, &value[1]);
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
982 if (log->file == NULL) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
983 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
984 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
985
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
986 } else {
5330
314c3d7cc3a5 Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5317
diff changeset
987 if (ngx_conf_full_name(cf->cycle, &value[1], 0) != NGX_OK) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
988 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
989 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
990
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
991 log->script = ngx_pcalloc(cf->pool, sizeof(ngx_stream_log_script_t));
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
992 if (log->script == NULL) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
993 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
994 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
995
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
996 ngx_memzero(&sc, sizeof(ngx_stream_script_compile_t));
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
997
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
998 sc.cf = cf;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
999 sc.source = &value[1];
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1000 sc.lengths = &log->script->lengths;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1001 sc.values = &log->script->values;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1002 sc.variables = n;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1003 sc.complete_lengths = 1;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1004 sc.complete_values = 1;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1005
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1006 if (ngx_stream_script_compile(&sc) != NGX_OK) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1007 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1008 }
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1009 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1010
5702
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
1011 process_formats:
777202558122 Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents: 5653
diff changeset
1012
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1013 if (cf->args->nelts >= 3) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1014 name = value[2];
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1015
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1016 } else {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1017 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1018 "log format is not specified");
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1019 return NGX_CONF_ERROR;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1020 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1021
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1022 fmt = lmcf->formats.elts;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1023 for (i = 0; i < lmcf->formats.nelts; i++) {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1024 if (fmt[i].name.len == name.len
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1025 && ngx_strcasecmp(fmt[i].name.data, name.data) == 0)
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1026 {
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1027 log->format = &fmt[i];
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1028 break;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1029 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1030 }
100
7ebc8b7fb816 nginx-0.0.1-2003-06-03-19:42:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 99
diff changeset
1031
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1032 if (log->format == NULL) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1033 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1034 "unknown log format \"%V\"", &name);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1035 return NGX_CONF_ERROR;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1036 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1037
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1038 size = 0;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1039 flush = 0;
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1040 gzip = 0;
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1041
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1042 for (i = 3; i < cf->args->nelts; i++) {
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1043
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1044 if (ngx_strncmp(value[i].data, "buffer=", 7) == 0) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1045 s.len = value[i].len - 7;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1046 s.data = value[i].data + 7;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1047
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1048 size = ngx_parse_size(&s);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1049
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1050 if (size == NGX_ERROR || size == 0) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1051 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1052 "invalid buffer size \"%V\"", &s);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1053 return NGX_CONF_ERROR;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1054 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1055
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1056 continue;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1057 }
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1058
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1059 if (ngx_strncmp(value[i].data, "flush=", 6) == 0) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1060 s.len = value[i].len - 6;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1061 s.data = value[i].data + 6;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1062
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1063 flush = ngx_parse_time(&s, 0);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1064
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1065 if (flush == (ngx_msec_t) NGX_ERROR || flush == 0) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1066 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1067 "invalid flush time \"%V\"", &s);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1068 return NGX_CONF_ERROR;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1069 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1070
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1071 continue;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1072 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1073
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1074 if (ngx_strncmp(value[i].data, "gzip", 4) == 0
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1075 && (value[i].len == 4 || value[i].data[4] == '='))
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1076 {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1077 #if (NGX_ZLIB)
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1078 if (size == 0) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1079 size = 64 * 1024;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1080 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1081
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1082 if (value[i].len == 4) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1083 gzip = Z_BEST_SPEED;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1084 continue;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1085 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1086
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1087 s.len = value[i].len - 5;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1088 s.data = value[i].data + 5;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1089
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1090 gzip = ngx_atoi(s.data, s.len);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1091
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1092 if (gzip < 1 || gzip > 9) {
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1093 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1094 "invalid compression level \"%V\"", &s);
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1095 return NGX_CONF_ERROR;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1096 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1097
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1098 continue;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1099
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1100 #else
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1101 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1102 "nginx was built without zlib support");
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1103 return NGX_CONF_ERROR;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1104 #endif
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1105 }
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1106
5653
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
1107 if (ngx_strncmp(value[i].data, "if=", 3) == 0) {
5833
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1108 s.len = value[i].len - 3;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1109 s.data = value[i].data + 3;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1110
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1111 ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t));
5833
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1112
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1113 ccv.cf = cf;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1114 ccv.value = &s;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1115 ccv.complex_value = ngx_palloc(cf->pool,
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1116 sizeof(ngx_stream_complex_value_t));
5833
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1117 if (ccv.complex_value == NULL) {
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1118 return NGX_CONF_ERROR;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1119 }
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1120
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1121 if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) {
5833
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1122 return NGX_CONF_ERROR;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1123 }
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1124
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1125 log->filter = ccv.complex_value;
e3016ee8dba3 Access log: fixed the "if=" parameter with buffering (ticket #625).
Valentin Bartenev <vbart@nginx.com>
parents: 5799
diff changeset
1126
5653
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
1127 continue;
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
1128 }
cb308813b453 Access log: the "if" parameter of the "access_log" directive.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5361
diff changeset
1129
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1130 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1131 "invalid parameter \"%V\"", &value[i]);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1132 return NGX_CONF_ERROR;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1133 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1134
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1135 if (flush && size == 0) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1136 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1137 "no buffer is defined for access_log \"%V\"",
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1138 &value[1]);
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1139 return NGX_CONF_ERROR;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1140 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1141
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1142 if (size) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1143
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1144 if (log->script) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1145 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
4133
59b99f217c6d Replaced "can not" with "cannot" and "could not" in a bunch of places.
Ruslan Ermilov <ru@nginx.com>
parents: 3991
diff changeset
1146 "buffered logs cannot have variables in name");
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1147 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1148 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1149
5799
b1f8285297a7 Access log: allowed logs to syslog with "if=" (ticket #596).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5719
diff changeset
1150 if (log->syslog_peer) {
b1f8285297a7 Access log: allowed logs to syslog with "if=" (ticket #596).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5719
diff changeset
1151 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
b1f8285297a7 Access log: allowed logs to syslog with "if=" (ticket #596).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5719
diff changeset
1152 "logs to syslog cannot be buffered");
b1f8285297a7 Access log: allowed logs to syslog with "if=" (ticket #596).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5719
diff changeset
1153 return NGX_CONF_ERROR;
b1f8285297a7 Access log: allowed logs to syslog with "if=" (ticket #596).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5719
diff changeset
1154 }
b1f8285297a7 Access log: allowed logs to syslog with "if=" (ticket #596).
Maxim Dounin <mdounin@mdounin.ru>
parents: 5719
diff changeset
1155
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1156 if (log->file->data) {
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1157 buffer = log->file->data;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1158
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1159 if (buffer->last - buffer->start != size
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1160 || buffer->flush != flush
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1161 || buffer->gzip != gzip)
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1162 {
4984
7737f0d788c1 Access log: fixed redundant buffer reallocation.
Valentin Bartenev <vbart@nginx.com>
parents: 4893
diff changeset
1163 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7737f0d788c1 Access log: fixed redundant buffer reallocation.
Valentin Bartenev <vbart@nginx.com>
parents: 4893
diff changeset
1164 "access_log \"%V\" already defined "
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1165 "with conflicting parameters",
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1166 &value[1]);
4984
7737f0d788c1 Access log: fixed redundant buffer reallocation.
Valentin Bartenev <vbart@nginx.com>
parents: 4893
diff changeset
1167 return NGX_CONF_ERROR;
7737f0d788c1 Access log: fixed redundant buffer reallocation.
Valentin Bartenev <vbart@nginx.com>
parents: 4893
diff changeset
1168 }
7737f0d788c1 Access log: fixed redundant buffer reallocation.
Valentin Bartenev <vbart@nginx.com>
parents: 4893
diff changeset
1169
7737f0d788c1 Access log: fixed redundant buffer reallocation.
Valentin Bartenev <vbart@nginx.com>
parents: 4893
diff changeset
1170 return NGX_CONF_OK;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1171 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1172
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1173 buffer = ngx_pcalloc(cf->pool, sizeof(ngx_stream_log_buf_t));
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1174 if (buffer == NULL) {
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1175 return NGX_CONF_ERROR;
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1176 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1177
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1178 buffer->start = ngx_pnalloc(cf->pool, size);
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1179 if (buffer->start == NULL) {
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1180 return NGX_CONF_ERROR;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1181 }
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1182
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1183 buffer->pos = buffer->start;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1184 buffer->last = buffer->start + size;
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1185
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1186 if (flush) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1187 buffer->event = ngx_pcalloc(cf->pool, sizeof(ngx_event_t));
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1188 if (buffer->event == NULL) {
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1189 return NGX_CONF_ERROR;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1190 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1191
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1192 buffer->event->data = log->file;
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1193 buffer->event->handler = ngx_stream_log_flush_handler;
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1194 buffer->event->log = &cf->cycle->new_log;
5897
dff86e2246a5 Access log: cancel the flush timer on graceful shutdown.
Valentin Bartenev <vbart@nginx.com>
parents: 5833
diff changeset
1195 buffer->event->cancelable = 1;
4986
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1196
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1197 buffer->flush = flush;
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1198 }
3efc49b156d9 Access log: the "flush" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4985
diff changeset
1199
4988
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1200 buffer->gzip = gzip;
3849bb380605 Access log: the "gzip" parameter of the "access_log" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4986
diff changeset
1201
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1202 log->file->flush = ngx_stream_log_flush;
4985
a0599b56e748 Reopening log files code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 4984
diff changeset
1203 log->file->data = buffer;
571
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1204 }
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1205
458b6c3fea65 nginx-0.3.7-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
1206 return NGX_CONF_OK;
99
a059e1aa65d4 nginx-0.0.1-2003-06-02-19:24:30 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
1207 }
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1208
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1209
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
1210 static char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1211 ngx_stream_log_set_format(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1212 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1213 ngx_stream_log_main_conf_t *lmcf = conf;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1214
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1215 ngx_str_t *value;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1216 ngx_uint_t i;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1217 ngx_stream_log_fmt_t *fmt;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1218
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1219 value = cf->args->elts;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1220
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1221 fmt = lmcf->formats.elts;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1222 for (i = 0; i < lmcf->formats.nelts; i++) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1223 if (fmt[i].name.len == value[1].len
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1224 && ngx_strcmp(fmt[i].name.data, value[1].data) == 0)
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1225 {
2036
1c009c5a163b fix error log message
Igor Sysoev <igor@sysoev.ru>
parents: 2008
diff changeset
1226 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
1c009c5a163b fix error log message
Igor Sysoev <igor@sysoev.ru>
parents: 2008
diff changeset
1227 "duplicate \"log_format\" name \"%V\"",
1c009c5a163b fix error log message
Igor Sysoev <igor@sysoev.ru>
parents: 2008
diff changeset
1228 &value[1]);
1c009c5a163b fix error log message
Igor Sysoev <igor@sysoev.ru>
parents: 2008
diff changeset
1229 return NGX_CONF_ERROR;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1230 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1231 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1232
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1233 fmt = ngx_array_push(&lmcf->formats);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1234 if (fmt == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1235 return NGX_CONF_ERROR;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1236 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1237
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1238 fmt->name = value[1];
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1239
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1240 fmt->flushes = ngx_array_create(cf->pool, 4, sizeof(ngx_int_t));
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1241 if (fmt->flushes == NULL) {
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1242 return NGX_CONF_ERROR;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1243 }
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1244
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1245 fmt->ops = ngx_array_create(cf->pool, 16, sizeof(ngx_stream_log_op_t));
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1246 if (fmt->ops == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1247 return NGX_CONF_ERROR;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1248 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1249
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1250 return ngx_stream_log_compile_format(cf, fmt->flushes, fmt->ops,
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1251 cf->args, 2);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1252 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1253
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1254
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1255 static char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1256 ngx_stream_log_compile_format(ngx_conf_t *cf, ngx_array_t *flushes,
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1257 ngx_array_t *ops, ngx_array_t *args, ngx_uint_t s)
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1258 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1259 u_char *data, *p, ch;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1260 size_t i, len;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1261 ngx_str_t *value, var;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1262 ngx_int_t *flush;
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1263 ngx_uint_t bracket, json;
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1264 ngx_stream_log_op_t *op;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1265
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1266 json = 0;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1267 value = args->elts;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1268
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1269 if (s < args->nelts && ngx_strncmp(value[s].data, "escape=", 7) == 0) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1270 data = value[s].data + 7;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1271
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1272 if (ngx_strcmp(data, "json") == 0) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1273 json = 1;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1274
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1275 } else if (ngx_strcmp(data, "default") != 0) {
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1276 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1277 "unknown log format escaping \"%s\"", data);
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1278 return NGX_CONF_ERROR;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1279 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1280
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1281 s++;
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1282 }
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1283
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1284 for ( /* void */ ; s < args->nelts; s++) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1285
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1286 i = 0;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1287
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1288 while (i < value[s].len) {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1289
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1290 op = ngx_array_push(ops);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1291 if (op == NULL) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1292 return NGX_CONF_ERROR;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1293 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1294
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1295 data = &value[s].data[i];
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1296
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1297 if (value[s].data[i] == '$') {
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1298
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1299 if (++i == value[s].len) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1300 goto invalid;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1301 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1302
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1303 if (value[s].data[i] == '{') {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1304 bracket = 1;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1305
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1306 if (++i == value[s].len) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1307 goto invalid;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1308 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1309
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1310 var.data = &value[s].data[i];
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1311
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1312 } else {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1313 bracket = 0;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1314 var.data = &value[s].data[i];
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1315 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1316
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1317 for (var.len = 0; i < value[s].len; i++, var.len++) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1318 ch = value[s].data[i];
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1319
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1320 if (ch == '}' && bracket) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1321 i++;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1322 bracket = 0;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1323 break;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1324 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1325
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1326 if ((ch >= 'A' && ch <= 'Z')
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1327 || (ch >= 'a' && ch <= 'z')
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1328 || (ch >= '0' && ch <= '9')
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1329 || ch == '_')
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1330 {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1331 continue;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1332 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1333
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1334 break;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1335 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1336
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1337 if (bracket) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1338 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1339 "the closing bracket in \"%V\" "
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1340 "variable is missing", &var);
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1341 return NGX_CONF_ERROR;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1342 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1343
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1344 if (var.len == 0) {
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1345 goto invalid;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1346 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1347
6840
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1348 if (ngx_stream_log_variable_compile(cf, op, &var, json)
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1349 != NGX_OK)
0cf4e82e7c48 Access log: support for json escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6693
diff changeset
1350 {
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1351 return NGX_CONF_ERROR;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1352 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1353
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1354 if (flushes) {
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1355
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1356 flush = ngx_array_push(flushes);
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1357 if (flush == NULL) {
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1358 return NGX_CONF_ERROR;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1359 }
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1360
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1361 *flush = op->data; /* variable index */
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1362 }
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2247
diff changeset
1363
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1364 continue;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1365 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1366
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1367 i++;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1368
880
3b763d36e055 axe old % log format
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
1369 while (i < value[s].len && value[s].data[i] != '$') {
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1370 i++;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1371 }
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1372
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1373 len = &value[s].data[i] - data;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1374
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1375 if (len) {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1376
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1377 op->len = len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1378 op->getlen = NULL;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1379
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1380 if (len <= sizeof(uintptr_t)) {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1381 op->run = ngx_stream_log_copy_short;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1382 op->data = 0;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1383
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1384 while (len--) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1385 op->data <<= 8;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1386 op->data |= data[len];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1387 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1388
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1389 } else {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1390 op->run = ngx_stream_log_copy_long;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1391
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2036
diff changeset
1392 p = ngx_pnalloc(cf->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1393 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1394 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1395 }
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1396
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1397 ngx_memcpy(p, data, len);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1398 op->data = (uintptr_t) p;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1399 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1400 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1401 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1402 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1403
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1404 return NGX_CONF_OK;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1405
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1406 invalid:
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1407
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1408 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%s\"", data);
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1409
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1410 return NGX_CONF_ERROR;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1411 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1412
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1413
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1414 static char *
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1415 ngx_stream_log_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1416 {
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1417 ngx_stream_log_srv_conf_t *lscf = conf;
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1418
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1419 time_t inactive, valid;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1420 ngx_str_t *value, s;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1421 ngx_int_t max, min_uses;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1422 ngx_uint_t i;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1423
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1424 if (lscf->open_file_cache != NGX_CONF_UNSET_PTR) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1425 return "is duplicate";
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1426 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1427
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1428 value = cf->args->elts;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1429
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1430 max = 0;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1431 inactive = 10;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1432 valid = 60;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1433 min_uses = 1;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1434
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1435 for (i = 1; i < cf->args->nelts; i++) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1436
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1437 if (ngx_strncmp(value[i].data, "max=", 4) == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1438
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1439 max = ngx_atoi(value[i].data + 4, value[i].len - 4);
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1440 if (max == NGX_ERROR) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1441 goto failed;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1442 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1443
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1444 continue;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1445 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1446
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1447 if (ngx_strncmp(value[i].data, "inactive=", 9) == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1448
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1449 s.len = value[i].len - 9;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1450 s.data = value[i].data + 9;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1451
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1452 inactive = ngx_parse_time(&s, 1);
4474
41f640a693de Time parsing cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1453 if (inactive == (time_t) NGX_ERROR) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1454 goto failed;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1455 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1456
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1457 continue;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1458 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1459
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1460 if (ngx_strncmp(value[i].data, "min_uses=", 9) == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1461
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1462 min_uses = ngx_atoi(value[i].data + 9, value[i].len - 9);
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1463 if (min_uses == NGX_ERROR) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1464 goto failed;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1465 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1466
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1467 continue;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1468 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1469
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1470 if (ngx_strncmp(value[i].data, "valid=", 6) == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1471
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1472 s.len = value[i].len - 6;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1473 s.data = value[i].data + 6;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1474
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1475 valid = ngx_parse_time(&s, 1);
4474
41f640a693de Time parsing cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
1476 if (valid == (time_t) NGX_ERROR) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1477 goto failed;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1478 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1479
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1480 continue;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1481 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1482
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1483 if (ngx_strcmp(value[i].data, "off") == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1484
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1485 lscf->open_file_cache = NULL;
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1486
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1487 continue;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1488 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1489
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1490 failed:
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1491
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1492 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1493 "invalid \"open_log_file_cache\" parameter \"%V\"",
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1494 &value[i]);
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1495 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1496 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1497
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1498 if (lscf->open_file_cache == NULL) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1499 return NGX_CONF_OK;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1500 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1501
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1502 if (max == 0) {
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1503 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1504 "\"open_log_file_cache\" must have \"max\" parameter");
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1505 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1506 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1507
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1508 lscf->open_file_cache = ngx_open_file_cache_init(cf->pool, max, inactive);
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1509
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1510 if (lscf->open_file_cache) {
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1511
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1512 lscf->open_file_cache_valid = valid;
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1513 lscf->open_file_cache_min_uses = min_uses;
2072
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1514
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1515 return NGX_CONF_OK;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1516 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1517
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1518 return NGX_CONF_ERROR;
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1519 }
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1520
ee2fecdfdef7 variables in access_log
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1521
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1522 static ngx_int_t
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1523 ngx_stream_log_init(ngx_conf_t *cf)
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1524 {
6693
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1525 ngx_stream_handler_pt *h;
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1526 ngx_stream_core_main_conf_t *cmcf;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1527
6678
0125b151c9a5 Stream: log module.
Vladimir Homutov <vl@nginx.com>
parents: 6626
diff changeset
1528 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 571
diff changeset
1529
6693
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1530 h = ngx_array_push(&cmcf->phases[NGX_STREAM_LOG_PHASE].handlers);
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1531 if (h == NULL) {
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1532 return NGX_ERROR;
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1533 }
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1534
3908156a51fa Stream: phases.
Roman Arutyunyan <arut@nginx.com>
parents: 6678
diff changeset
1535 *h = ngx_stream_log_handler;
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1536
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
1537 return NGX_OK;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 119
diff changeset
1538 }