mς AγΈEc@sYdZdklZdefd„ƒYZdefd„ƒYZdefd„ƒYZdS( s&ZConfig factory datatypes for loggers.(sFactorytLoggerFactoryBasecBs;tZdZd„Zd„Zd„Zd„Zd„ZRS(s‡Base class for logger factories. Factory used to create loggers while delaying actual logger instance construction. We need to do this because we may want to reference a logger before actually instantiating it (for example, to allow the app time to set an effective user). An instance of this wrapper is a callable which, when called, returns a logger object. cCs)ti|ƒ|i|_|i|_dS(N(tFactoryt__init__tselftsectiontlevelthandlersthandler_factories(RR((t?/data/zmath/zope/lib/python/ZConfig/components/logger/logger.pyRs  cCs‡dk}|i|iƒ}|i|iƒ|io.xK|iD]}|ƒ}|i |ƒq?Wn!dk l }|i |i ƒƒ|S(N(s loghandler(tloggingt getLoggerRtnametloggertsetLevelRRthandler_factorythandlert addHandlertZConfig.components.loggert loghandlert NullHandler(RR RRRR ((Rtcreate#s     cCs |ƒdS(N(R(R((Rtstartup1scCssdk}|i}xZ|iD]O}|iƒ}||ijo-||ijo |}qkt||ƒ}qqW|S(s¨Return the lowest log level provided by any configured handler. If all handlers and the logger itself have level==NOTSET, this returns NOTSET. N( R RRtlowestRtfactorytgetLeveltNOTSETtmin(RRR RR((RtgetLowestHandlerLevel5s     cCsX|ƒ}xH|iD]=}t|ddƒ}|dj ot|ƒo |ƒqqWdS(s#Re-open any handlers for which this is a meaningful operation. This only works on handlers on the logger provided by this factory directly; handlers for child loggers are not affected. (This can be considered a bug, but is sufficient at the moment.) treopenN(RR RRtgetattrtNoneRtcallable(RRRR ((RRFs  (t__name__t __module__t__doc__RRRRR(((RRs     tEventLogFactorycBstZdZeZRS(s,Logger factory that returns the root logger.(R R!R"RR (((RR#Us t LoggerFactorycBs tZdZd„Zd„ZRS(s-Logger factory that returns the named logger.cCs,ti||ƒ|i|_|i|_dS(N(RRRRR t propagate(RR((RR^s cCsti|ƒ}|i|_|S(N(RRRR R%(RR ((RRcs (R R!R"RR(((RR$[s  N(R"t!ZConfig.components.logger.factoryRRR#R$(R#RRR$((Rt?s B