[asterisk-app-dev] ARI method of posting log messages to Asterisk
Mark Michelson
mmichelson at digium.com
Wed Oct 16 13:49:21 CDT 2013
Hey folks,
Have a look at ASTERISK-22699 [1]
The issue pertains to allowing for ARI to write content to Asterisk's
logs. I'd like to propose my ideas for how logging from ARI could be
done. First, let's consider what an Asterisk log message looks like:
[Oct 16 17:20:23] ERROR[20023] foo.c:666 I AM ERROR.
The message consists of 6 parts: the timestamp, the level, the thread
ID, the file name, the line number, and the message. Of these, the
timestamp and thread ID should be filled in by Asterisk. The other four
parts could potentially be fed into Asterisk by an ARI application.
Moving on to the ARI method for logging to the Asterisk log, I think it
should be something like:
POST /asterisk/logMessage
At a minimum, the parameters for this would be
level: One of the Asterisk log levels (such as "error", "warning",
"debug", etc.)
message: The string to print to the log
The minimum is nice in that it keeps the API call simple, but it has the
downside of making your messages look like this:
[Oct 16 17:20:23] WARNING[20023] ?:0 You're tearing me apart, Lisa!
We could expand the method a bit by adding in a couple more parameters:
fileName: The file name to place in the log message.
lineNumber: The line number to place in the log message.
This way, the previous log message would look like this instead:
[Oct 16 17:20:23] WARNING[20023] cool_app.py:143 You're tearing me
apart, Lisa!
Expanding further, consider that log levels such as debug and verbose
also have an additional integer value associated with them so that they
are only printed depending on what you've set core debug or core verbose
to. We could just make the assumption that all verbose and debug
messages logged through ARI have a 0 for this value, or this integer
value could be exposed as part of the ARI method as well.
So what do you thing of this proposal? What degree of control would you
prefer to have for writing log messages to Asterisk's logger?
As a second discussion, consider that Asterisk, since 1.8 I believe, has
had the concept of dynamic log levels. What this means is that a module
can register a log level called "FOO" for instance, and log messages
directed at that level would look like:
[Oct 16 17:20:23] FOO[20023] bar.c:717 They're eating her! And then
they're going to eat me! OH MY GOOOOOOOOOOOOOOOOOOD!
This could be a useful concept for ARI in one of two possible ways.
1) The ARI implementation in Asterisk could register a log level at
startup (called "ARI" possibly) that ARI app developers could write to
in order to keep their messages at a different level from any of the
other messages in the system.
2) We could expose an ARI call that would allow app developers to create
their own dynamic log levels on the fly. For instance, you could have
POST /asterisk/logLevel
with the parameter
level: The name of the level to register to Asterisk
This way you could record different log messages at different dynamic
log levels if you desired.
Would dynamic log levels be useful for you in your applications? If so,
would you prefer to have a dedicated "ARI" level to write to or would
you prefer the ability to create your own levels to write to?
More information about the asterisk-app-dev
mailing list