[PEAK] Logging to Email
Phillip J. Eby
pje at telecommunity.com
Wed Dec 31 11:44:01 EST 2003
At 08:31 AM 1/2/04 +0000, Bill Trenker wrote:
>I'm one of those programmers who learns best by example so I'm very
>grateful for "IntoToPeak". The recent discussion on logging twigged me to
>read Lesson 5 in the "Intro". Pondering the logtee example got me
>wondering if there is a way of sending log messages to an email address?
>
>If the "really worried boss" in the example is away from the office, it
>might make sense for him/her to be notified of critical log messages by email.
Just FYI, chapter 5 doesn't reflect the actual state of PEAK. R.D. wrote
it based on an impression that certain features were available that
actually aren't. ('logtee' and 'syslog'.)
Anyway, right now you could implement such a thing by subclassing
AbstractLogger and implementing the 'publish()' method as sending to
email. You would then register an instance of your subclass as a property
in the 'peak.logs' namespace.
(And now for something completely different...)
In future (i.e. by the a3 release), you'd do this instead by implementing a
plugin implementing ILogHandler (which doesn't exist yet) and registering
it as a listener for the appropriate category or categories.
I recently added support for plugins to the peak.config architecture, but
nothing actually uses them yet. Partly, this is waiting on the ZConfig
"schema service" and ZConfig file URL support, because it'll be easier to
create and register plugins of most kinds using ZConfig files. E.g.:
[ZConfig.schemas]
loggers = naming.LinkRef('pkgfile:peak.running/Loggers.xml')
[peak.logging-plugins]
my-plugins = naming.LinkRef('zconfig.loggers:/foo/bar')
The idea here is that when the ILoggingService loads plugins from the
'peak.logging-plugins' namespace, it will then load the ZConfig file
/foo/bar using a schema found in 'Loggers.xml' in the 'peak.running'
package. Those plugins can then have assembly events that will register
them as listeners for the appropriate events.
These generic plugin and ZConfig schema support mechanism should be usable
for lots of other things, including perhaps some of the projects that
Alexander and others have mentioned on this list.
Interestingly, the new plugin mechanism can be compared to Eclipse's
concept of "Extension points" and "Extensions". You could even implement
an automatic plugin loading system by doing something like:
[Import on Demand]
glob = "glob"
[Load settings from]
files = glob.glob("/someProg/plugins/*/plugins.ini")
Each subdirectory of 'plugins' would have a 'plugins.ini' that would
register plugins for the various "extension points" that might need to be
hooked. Some of those plugins might in turn be loaded-on-demand from
ZConfig files, etc.
More information about the PEAK
mailing list