1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
$Id: CHANGELOG,v 1.9 2002/04/21 23:01:52 helios Exp $
TODO:
* Full commenting of the code.
* Rethink documentation flow and rewrite?
* Port connection portion to other DBMS? Genericize the module? Start with PostgreSQL.
* Fully test create-table
* Document new features
* preserve and socket configurable in .conf
* segfault when mvh on
CHANGES:
1.16:
* Moved all the user DEFINEs inside the .c file -- splitting them
between the C and the Makefile was getting just too cumbersome.
* A new MySQLPreserveFile runtime config directive. In the last
version the name of the preserve-file was hardcoded and therefore
global across all Apache virtual servers. Now the user can configure
this on a per-virthost basis. It defaults to a hardcoded value
if the user does not define it.
* A new MySQLSocketFile runtime config directive. In the last
version the name of the MySQL socket was hardcoded. Now the user
can configure this at Apache runtime. However, it is a global
setting (set once) just like the rest of the actual database info is.
It defaults ot a hardcoded value if the user does not define it.
* A new MySQLCreateTables runtime config directive. Module can now
create the access table on-the-fly. Table creation takes place
during the virtual server's first request and is flagged after that.
* A new MySQLMassVirtualHosting runtime config directive. This flag
currently only activates a single feature: each virtual server
gets its very own exclusive table prefixed 'access_' with the
server's name following. It also implies MySQLCreateTables On.
* escape_query (was mysql_escape_log) is now called on every item
rather than first checking to see if it needs to be called, which
was probably a big waste of time. Furthermore the routine now
uses a native MySQL API call to do the escaping instead of doing
this 'manually.' It attempts to use the charset-respectful MySQL
call first, but falls back on a more generic call if the MySQL
server is unavailable (e.g. if it goes offline).
* Open preserve file with pfopen instead of regular fopen to
take advantage of pool structure.
* As forewarned, I finally got rid of the code to support separate
Referer and Agent logs.
* Finally brought the make process up-to-date with the way Apache
likes modules to be done.
* Cookies are now configurable on a per-virtualserver basis. Before
they were on a global basis.
1.15:
* Vastly improved error reporting is a lot clearer about lost db
connections, etc. Some unreachable code has been corrected.
* The way that query-retries and openlink-retries are handled has
been tweaked and improved.
* Missed database entries are now preserved for later inclusion. This
file is not held open but is closed after each use, so it's safe
to delete while Apache is running.
* Now each child instantiates its MySQL link upon birth rather than
waiting for its first request.
1.14:
* Improved the apxs instructions based on user feedback, including the
mysql.sock define issue.
* Corrected the INSTALL example directives to the new format.
* Some improvements to 'make distro'
1.13:
* Now use ap_get_server_name() in extract_virtual_host() to fix the
instances where mass-virtual-hosting sites were getting the wrong
server-name written to the log.
* Now use mysql_real_connect() instead of mysql_connect(). The
latter's use was deprecated and did not work in MySQL 4.
* There is now a DEFINE for the socket name. This is used by the
mysql_real_connect() function and is relevant only if the db resides
on localhost. It is irrelevant if the db resides on a networked
machine and is ignored in that case (although it still must be defined
for the connect to work).
1.12:
* Added a mysql_close() call to get rid of those annoying MySQL
complaints every time an httpd child process terminates. (Apache
1.3 or later.)
* Considerable code reorganization and cleanup.
1.11:
* Completely re-worked the cookie code. Now the user can instruct
mod_log_mysql which cookie (out of many available) to log. (See
the online directives documentation and FAQ.)
* New config capability: 'H' to log the request protocol
(e.g. HTTP/1.1)
* New config capability: 'm' to log the request method
(e.g. GET, PUT, etc.)
* New config capabilities: 'z' 'q' & 'Q' to log SSL_CIPHER,
SSL_CIPHER_USEKEYSIZE and SSL_CIPHER_ALGKEYSIZE. These require
openssl and glibc-devel to be installed. (See the online
directives documentation and FAQ.)
* Fixed a bug in make_combined_log.pl that caused it to generate
incorrect output on single-digit days.
* Fixed make_combined_log.pl to use the data logged by 'H' and 'm'.
* Migrated all log_error calls to the newer ap_log_error call.
* Added a DEBUG define to activate certain debugging/informational
error-log messages (for devel purposes).
* I apologize for the inconvenience this may cause: I decided to
rename the runtime configuration directives so that they would
make more sense and group together with a "MySQL" prefix. They
are now:
MySQLRefererLogTable
The MySQL table that holds the referer log
MySQLAgentLogTable
The MySQL table that holds the agent log
MySQLTransferLogTable
The MySQL table that holds the transfer log
MySQLTransferLogFormat
Instruct the module what information to log to the MySQL transfer log
MySQLRefererIgnore
List of referers to ignore, accesses that match will not be logged to MySQL
MySQLRequestIgnore
List of URIs to ignore, accesses that match will not be logged to MySQL
MySQLRemhostIgnore
List of remote hosts to ignore, accesses that match will not be logged to MySQL
MySQLDatabase
The name of the MySQL database for logging
MySQLWhichCookie
The CookieName that you want logged when using the 'c' config directive
MySQLLoginInfo
The MySQL host, user-id and password for logging
You'll need to just do a search-and-replace in your httpd.conf...
Again, I'm sorry, but it really is better this way.
* Cleaned up the summaries that get output on "httpd -L"
* Expanded the enclosed access_log.sql file to support every column type
that mod_log_mysql provides -- delete the ones that you don't need.
* Some cleanup of the Makefile - pay attention to the settings
* Made the MySQLTransferLogFormat default "AbHhmRSsTUuv" to incorporate the
new column types and sort the characters alphabetically for reading ease.
1.10:
* New config directive/capability: 'c' to log mod_usertrack cookies.
* Some code cleanup and commenting.
* Referer and User-Agent now set to want_orig=1 ( a very minor detail )
* Corrected mysql_escape_log to properly check for and escape strings
with `dangerous' characters. It appears that it was doing this
incorrectly before.
* Deleted log_mysql_child(), a function that was never called.
1.09:
* If the MySQL INSERT causes an error, we re-try that INSERT after
a short 1/2-second sleep just to make sure it wasn't due to a
network glitch or other gremlin.
* Made the default log format: huSUsbTvRA. This provides everything
required to reproduce Combined Log Format data.
1.08:
* Now log a single '-' (instead of a zero-length string) when
User-Agent is blank. This is similar to what Apache does in its own
logs. (Should have caught this when I did the same thing for
Referer.)
* Separated documentation into README, INSTALL, CHANGELOG, etc. as
appropriate.
1.07:
* Renamed TransferIgnore directive to RequestIgnore, since that's
really a more specific and accurate description of what that
directive means.
* Now log a single '-' (instead of a zero-length string) when Referer
is blank. This is similar to what Apache does in its own logs.
1.06:
* Added 'R' and 'A' options to TransferLogMySQLFormat so that we now
can log Referer and Agent respectively.
* Code cleanup: all compilation warnings are now gone, even with -Wall.
(They were mainly "const" issues that needed straightening up.)
* Added RemhostIgnore configuration directive to permit non-logging of
any request coming from a specific host, e.g. a local network
machine, etc.
* Now use the non-obsolete ap_compat.h headerfile instead of
compat.h. This simply gets rid of a compilation warning, nothing
more.
* Now include a headerfile (http_log.h) that was missing. Its
absence was giving us this warning message: "implicit declaration of
function `ap_log_error_old'."
* For numerics that Apache customarily logs as a "-" we now log a zero
instead of a -1. This seems to be more intuitive, e.g. in the
"bytes_sent" column.
* We now have a Makefile and a full "make" process that does all
the real work.
* New maintainer.
1.05:
* Removed some redundant code, after being noted by Vivek Khera that
this code doesn't even get called with the current apache code. It
can be done in apache 1.3, but it works ok without it anyway.
* Added the necessary include file to make the module compile under
Apache 1.3b6. I haven't actually tested that it works, though.
indent'd the code.
1.04:
* Rearranged some code to allow for a successful apache 1.3beta
compilation. Please note that this is *untested*, I only got it to
compile, I haven't actually tried to run apache 1.3.
1.03:
* Changed the check for 'mysql server has gone away' to be case
insensitive, so that it works with MySQL 3.21
* Changed the behavior so that a link isn't established until it's
necessary (e.g., if SQL logging is used for one virtual IP, a link
won't be opened until there's an access to that IP).
1.02:
* Managed to track down that segmentation fault that occured once, and
fixed it. No known bugs now exist.
1.01:
* Segmentation fault in case of certain parameters lacking fixed.
* Worked around the SIGPIPE signal that's sent in certain events from
* mysql_query(). Minor modifications
|