ldmud-3.2.9/doc/
ldmud-3.2.9/doc/efun/
ldmud-3.2.9/mud/
ldmud-3.2.9/mud/heaven7/
ldmud-3.2.9/mud/heaven7/lib/
ldmud-3.2.9/mud/lp-245/
ldmud-3.2.9/mud/lp-245/banish/
ldmud-3.2.9/mud/lp-245/doc/
ldmud-3.2.9/mud/lp-245/doc/examples/
ldmud-3.2.9/mud/lp-245/doc/sefun/
ldmud-3.2.9/mud/lp-245/log/
ldmud-3.2.9/mud/lp-245/obj/Go/
ldmud-3.2.9/mud/lp-245/players/lars/
ldmud-3.2.9/mud/lp-245/room/death/
ldmud-3.2.9/mud/lp-245/room/maze1/
ldmud-3.2.9/mud/lp-245/room/sub/
ldmud-3.2.9/mud/lp-245/secure/
ldmud-3.2.9/mud/morgengrauen/
ldmud-3.2.9/mud/morgengrauen/lib/
ldmud-3.2.9/mud/sticklib/
ldmud-3.2.9/mud/sticklib/src/
ldmud-3.2.9/mudlib/uni-crasher/
ldmud-3.2.9/pkg/
ldmud-3.2.9/pkg/debugger/
ldmud-3.2.9/pkg/diff/
ldmud-3.2.9/pkg/misc/
ldmud-3.2.9/src/autoconf/
ldmud-3.2.9/src/bugs/
ldmud-3.2.9/src/bugs/MudCompress/
ldmud-3.2.9/src/bugs/b-020916-files/
ldmud-3.2.9/src/bugs/doomdark/
ldmud-3.2.9/src/bugs/ferrycode/ferry/
ldmud-3.2.9/src/bugs/ferrycode/obj/
ldmud-3.2.9/src/bugs/psql/
ldmud-3.2.9/src/done/
ldmud-3.2.9/src/done/order_alist/
ldmud-3.2.9/src/done/order_alist/obj/
ldmud-3.2.9/src/done/order_alist/room/
ldmud-3.2.9/src/gcc/
ldmud-3.2.9/src/gcc/2.7.0/
ldmud-3.2.9/src/gcc/2.7.1/
ldmud-3.2.9/src/hosts/
ldmud-3.2.9/src/hosts/GnuWin32/
ldmud-3.2.9/src/hosts/amiga/NetIncl/
ldmud-3.2.9/src/hosts/amiga/NetIncl/netinet/
ldmud-3.2.9/src/hosts/amiga/NetIncl/sys/
ldmud-3.2.9/src/hosts/i386/
ldmud-3.2.9/src/hosts/msdos/byacc/
ldmud-3.2.9/src/hosts/msdos/doc/
ldmud-3.2.9/src/hosts/os2/
ldmud-3.2.9/src/hosts/win32/
ldmud-3.2.9/src/util/
ldmud-3.2.9/src/util/erq/
ldmud-3.2.9/src/util/indent/hosts/next/
ldmud-3.2.9/src/util/xerq/
ldmud-3.2.9/src/util/xerq/lpc/
ldmud-3.2.9/src/util/xerq/lpc/www/
Short: Logging idea: Shared Library
From: Christian Welzel <gawain@wh9.tu-dresden.de>
Date: Wed, 21 Nov 2001 18:33:30 +0100
Type: Feature
State: New

Hai Lars!

Wir hatten uns mal vor langer zeit ueber den driver und sein komisches 
logging unterhalten... du meintest, ein neues log-konzept waere noetig...

heute hatte ich die idee, dass der driver ja in eine mysql-datenbank loggen 
koennte. problem ist natuerlich diese schwaeche im driver ... 

meine vorschlaege dazu:
die logging-funs werden nicht mehr in den driver-kompiliert, sondern in eine 
externe shared-lib. diese kann man dann beim start des drivers per dlopen() 
oeffnen. dann gibt es drei neue funktionen: (sys)log_open(), (sys)log(), 
(sys)log_close(); eine neue config_option: (SYS)LOG_METHOD. 
(sys)log_open() laedt abhaengig von SYS)LOG_METHOD die entsprechende 
shared-lib, (sys)log() loggt die daten (in dem die bibliotheksfunktion 
aufgerufen wird) und (sys)log_close() schliesst die lib wieder...
dazu wird bei (sys)log die syntax vom system-syslog genommen und auch dessen 
headerfile (im groben)... so kann das ausgabe-modul entscheiden, wo was wie 
hingeloggt werden soll... und man kann das logging an seine beduerfnisse 
einfach anpassen...

was meinst du dazu ?

--- It would be nice as additional feature.


> Was mir so auf Anhieb in den Kopf kommt, sind zwei grundlegene Schwaechen
> des derzeitigen Loggings: die Ausgaben sind ueber stdout, stderr, und ein
> Logfile verstreut, und die Anbindung an die Mudlib ist sehr improvisiert.
> Damit verbunden ist eine konfuse interne Schnittstelle.

das waere mit meinem konzept elegant geloest...
driverseite: der driver loggt alles mit seinem syslog(). Dieses bekommt ja 
informationen, wer loggt (facility) und was geloggt wird (level: warn, crit, 
etc). ausserdem noch den string um loggen und ob ungebuffert geschrieben 
werden soll...
also: int syslog(int fac, int level, char *message, bool flush)
die lib kann dann ein konfigfile bekommen, wo jeder mud-betreiber einstellen 
kann, welche fac und welches level wohin geloggt wird. jeder kann dass also 
nach seinen wuenschen anpassen.

> Ganz loswerden will ich direkte Ausgaben auf stdio/Logfile nicht, da dies
> ein sehr effizientes Mittel zur Fehlerdiagnose ist. Was fehlt, ist eine
> Festlegung, welche Ausgaben wohin gehoeren, und eine einfache
> Schnittstelle, die sowohl die Logfiles als auch die Mudlib bedient (und
> dabei mit mehrzeiligen Eintraegen klarkommt).

die ausgaben kommen alle in die externe lib, auch die string-ausgaben. dass 
hat nicht wirklich nachteile, fuehrt aber zu besser kapselung. man kompiliert 
also nicht mehr alles in den driver, sondern der driver hat halt std-maessig 
die lib dabei, die in die dateien loggt...
wer was anderes moechte ersetzt einfach die lib, man koennte auch einfach 
sowas wie log-chains machen: erst loggt lib1, dann lib2,... zum schluss libx.
wie gesagt, was wo hinkommt, kann der admin selbst konfigurieren...

zur mudlib-schnittstelle: man koennte ne efun syslog_notify (oder so) 
einfuehren, die ein array/mapping uebergeben bekommt, in dem steht, bei 
welchen fac und welchen leveln ein driverhook aufgerufen wird. man setzt dann 
einfach nen driverhook HOOK_SYSLOG (oder so) und bekommt den vom driver 
aufgerufen, wenn der merkt, dass man das will...
also (z.b.): (pseudocode :)
setdriverhook(HOOK_SYSLOG, #'mysyslog(int fac, int level, string message));
syslog_notify(([F_MAIL: L_CRIT, F_DRIVER: L_ALL, F_SHELLS: L_CRIT]));
was die leute dann damit machen, koennen sie selbst entscheiden...

> Die Logausgaben zusaetzlich in eine Shared Library zu leiten ist eine gute
> Idee, aber ich sehe das als optionales Feature.

optional sollte sein, wer welche lib einsetzt, aber alle logmodule sollten 
als shared.lib implementiert sein. weil wenn ich nach mysql logge (oder 
sonstwohin), mag ich nicht auch noch in die files geloggt haben... und wenn 
doch, klemm ich zwei libs hintereinander und schon geht dass... ist ein sehr 
schoener flexibler ansatz :)

--- Still: keep logs in driver, but make it possible to turn them off.