% language=us runpath=texruns:manuals/cld % maybe this will become a section instead \startcomponent cld-logging \environment cld-environment \startchapter[title={Logging}] Logging and localized messages have always been rather standardized in \CONTEXT, so upgrading the related mechanism had been quite doable. In \MKIV\ for a while we had two systems in parallel: the old one, mostly targeted at messages at the \TEX\ end, and a new one used at the \LUA\ end. But when more and more hybrid code showed up, integrating both systems made sense. Most logging concerns tracing and can be turned on and off on demand. This kind of control is now possible for all messages. Given that the right interfaces are used, you can turn off all messages: \starttyping context --silent \stoptyping This was already possible in \MKII, but there \TEX's own messages still were visible. More important is that we have control: \starttyping context --silent=structure*,resolve*,font* \stoptyping This will disable all reporting for these three categories. It is also possible to only disable messages to the console: \starttyping context --noconsole \stoptyping In \CONTEXT\ you can use directives: \starttyping \enabledirectives[logs.blocked=structure*,resolve*,font*] \enabledirectives[logs.target=file] \stoptyping As all logging is under \LUA\ control and because this (and other) kind of control has to kick in early in the initialization the code might look somewhat tricky. Users won't notice this because they only deal with the formal interface. Here we will only discuss the \LUA\ interfaces. Messages related to tracing are done as follows: \starttyping local report_whatever = logs.reporter("modules","whatever") report_whatever("not found: %s","this or that") \stoptyping The first line defined a logger in the category \type {modules}. You can give a second argument as well, the subcategory. Both will be shown as part of the message, of which an example is given in the second line. These messages are shown directly, that is, when the function is called. However, when you generate \TEX\ code, as we discuss in this document, you need to make sure that the message is synchronized with that code. This can be done with a messenger instead of a reporter. \starttyping local report_numbers = logs.reporter("numbers","check") local status_numbers = logs.messenger("numbers","check") status_numbers("number 1: %s, number 2: %s",123,456) report_numbers("number 1: %s, number 2: %s",456,123) \stoptyping Both reporters and messages are localized when the pattern given as first argument can be found in the \type {patterns} subtable of the interface messages. Categories and subcategories are also translated, but these are looked up in the \type {translations} subtable. So in the case of \starttyping report_whatever("found: %s",filename) report_whatever("not found: %s",filename) \stoptyping you should not be surprised if it gets translated. Of course the category and subcategory provide some contextual information. \stopchapter \stopcomponent