This directory contains the infrastructure to create unique tags for error log messages. In the source, the tags use the APLOGNO(02182) macro where the argument is a 5 digit decimal number. The macro expands to "AH02182: ". The idea is that these tags help users finding useful information with search engines. The use of the macro is intended to prevent search engine hits at svn.apache.org or the svn commit mailing list. Basic rules: - Only messages of level debug and higher should get tags. - If the same message is logged at two different places in httpd, assign two different tags. - If the context changes, where a message is generated, assign a new tag. - If only the text of the message changes (e.g. making it more verbose), keep the tag. - Never reuse tags that have been removed, numbers are cheap. - Use the same tags in different branches. - The tag AH02182 is reserved for examples. - Currently only modules included in the httpd distribution should do this. TODO: Define what third-party modules should do. How to add a few new tags: ========================== When adding new error messages, it is easiest to just add empty APLOGNO() tags and then run the update-log-msg-tags perl script on the source file. This will look into docs/log-message-tags/next-number to determine the next tag to be used, fill in all empty APLOGNO() tags, and update docs/log-message-tags/next-number accordingly. The toplevel Makefile has a target update-log-msg-tags to run the script over all *.c files in the source tree. The script also puts a list of all messages in docs/log-message-tags/list. This list should not be committed to svn. How to add lots of new tags: ============================ In order to find candidate calls to ap_log_*error, coccinelle's spatch command can be used. It will add empty APLOGNO() tags where the loglevel is a constant and is of level debug or above. Then, update-log-msg-tags can be used to add numbers to the APLOGNO() tags. The invocation for spatch is: % DIR=docs/log-message-tags % spatch --sp_file $DIR/find-messages.cocci --in_place --macro_file $DIR/macros.h FILESTOCHECK where FILESTOCHECK is the list of C files you want spatch to work on. After the initial addition of tags, calling spatch on the same file again may be a bad idea. But it may still be useful when adding larger pieces of code to httpd. Depending on the build details of coccinelle, the regular expressions in the spatch files can either be in normal PCRE form, or in OCAML Str regexp form. If your build only supports the latter, you will have to put a backslash in front of every '(', ')' and '|' that is part of a regexp in the cocci file. Example: - original lines identifier level =~ "^APLOG_(EMERG|ALERT|CRIT|ERR|WARNING|NOTICE|INFO|STARTUP|DEBUG)$"; identifier fn =~ "^ap_log_(|r|c|p)error$"; - new lines identifier level =~ "^APLOG_\(EMERG\|ALERT\|CRIT\|ERR\|WARNING\|NOTICE\|INFO\|STARTUP\|DEBUG\)$"; identifier fn =~ "^ap_log_\(\|r\|c\|p\)error$"; To finally replace the empty "APLOGNO()," with a real number, run: % perl docs/log-message-tags/update-log-msg-tags FILESTOFIX