[CalendarServer-changes] [11379] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon Jun 17 17:44:18 PDT 2013
Revision: 11379
http://trac.calendarserver.org//changeset/11379
Author: wsanchez at apple.com
Date: 2013-06-17 17:44:18 -0700 (Mon, 17 Jun 2013)
Log Message:
-----------
Move log level management into LogLevelFilteringPredicate.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tap/caldav.py
CalendarServer/trunk/calendarserver/tools/dkimtool.py
CalendarServer/trunk/calendarserver/tools/loadaugmentdb.py
CalendarServer/trunk/calendarserver/tools/resources.py
CalendarServer/trunk/calendarserver/tools/upgrade.py
CalendarServer/trunk/contrib/performance/loadtest/test_sim.py
CalendarServer/trunk/twext/python/log.py
CalendarServer/trunk/twext/python/test/test_log.py
CalendarServer/trunk/twistedcaldav/stdconfig.py
CalendarServer/trunk/twistedcaldav/test/test_cache.py
CalendarServer/trunk/twistedcaldav/test/test_config.py
Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -37,32 +37,33 @@
from zope.interface import implements
-from twisted.plugin import IPlugin
-
from twisted.python.log import FileLogObserver, ILogObserver
from twisted.python.logfile import LogFile
from twisted.python.usage import Options, UsageError
-
+from twisted.python.util import uidFromString, gidFromString
+from twisted.plugin import IPlugin
from twisted.internet.defer import gatherResults, Deferred, inlineCallbacks, succeed
-
from twisted.internet.process import ProcessExitedAlready
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.protocol import ProcessProtocol
-
+from twisted.internet.endpoints import UNIXClientEndpoint, TCP4ClientEndpoint
from twisted.application.internet import TCPServer, UNIXServer
from twisted.application.service import MultiService, IServiceMaker
from twisted.application.service import Service
+from twisted.protocols.amp import AMP
-from twistedcaldav.config import config, ConfigurationError
-from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
from twext.web2.server import Site
-from twext.python.log import Logger
-from twext.python.log import LogLevel, logLevelForNamespace, setLogLevelForNamespace
+from twext.python.log import Logger, LogLevel
from twext.python.filepath import CachingFilePath
from twext.internet.ssl import ChainingOpenSSLContextFactory
from twext.internet.tcp import MaxAcceptTCPServer, MaxAcceptSSLServer
from twext.web2.channel.http import LimitingHTTPFactory, SSLRedirectRequest
from twext.web2.metafd import ConnectionLimiter, ReportingHTTPService
+from twext.enterprise.ienterprise import POSTGRES_DIALECT
+from twext.enterprise.ienterprise import ORACLE_DIALECT
+from twext.enterprise.adbapi2 import ConnectionPool
+from twext.enterprise.queue import WorkerFactory as QueueWorkerFactory
+from twext.enterprise.queue import PeerConnectionPool
from txdav.common.datastore.sql_tables import schema
from txdav.common.datastore.upgrade.sql.upgrade import (
@@ -70,49 +71,40 @@
UpgradeDatabaseCalendarDataStep, UpgradeDatabaseOtherStep,
)
from txdav.common.datastore.upgrade.migrate import UpgradeToDatabaseStep
+from txdav.caldav.datastore.scheduling.imip.inbound import MailRetriever
+from txdav.caldav.datastore.scheduling.imip.inbound import scheduleNextMailPoll
+from twistedcaldav.config import config, ConfigurationError
+from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
from twistedcaldav.directory import calendaruserproxy
from twistedcaldav.directory.directory import GroupMembershipCacheUpdater
from twistedcaldav.localization import processLocalizationFiles
from twistedcaldav import memcachepool
from twistedcaldav.upgrade import UpgradeFileSystemFormatStep, PostDBImportStep
+from twistedcaldav.directory.directory import scheduleNextGroupCachingUpdate
-from calendarserver.tap.util import pgServiceFromConfig, getDBPool, MemoryLimitService
-from calendarserver.tap.util import checkDirectories
-from calendarserver.tap.util import Stepper
-
-from twext.enterprise.ienterprise import POSTGRES_DIALECT
-from twext.enterprise.ienterprise import ORACLE_DIALECT
-from twext.enterprise.adbapi2 import ConnectionPool
-
try:
from twistedcaldav.authkerb import NegotiateCredentialFactory
NegotiateCredentialFactory # pacify pyflakes
except ImportError:
NegotiateCredentialFactory = None
+from calendarserver.tap.util import pgServiceFromConfig, getDBPool, MemoryLimitService
+from calendarserver.tap.util import checkDirectories
+from calendarserver.tap.util import Stepper
from calendarserver.tap.util import ConnectionDispenser
-
+from calendarserver.tap.util import getRootResource
+from calendarserver.tap.util import storeFromConfig
+from calendarserver.tap.util import pgConnectorFromConfig
+from calendarserver.tap.util import oracleConnectorFromConfig
from calendarserver.controlsocket import ControlSocket
-from twisted.internet.endpoints import UNIXClientEndpoint, TCP4ClientEndpoint
-
from calendarserver.controlsocket import ControlSocketConnectingService
-from twisted.protocols.amp import AMP
-from twext.enterprise.queue import WorkerFactory as QueueWorkerFactory
-from twext.enterprise.queue import PeerConnectionPool
from calendarserver.accesslog import AMPCommonAccessLoggingObserver
from calendarserver.accesslog import AMPLoggingFactory
from calendarserver.accesslog import RotatingFileAccessLoggingObserver
-from calendarserver.tap.util import getRootResource
-from calendarserver.tap.util import storeFromConfig
-from calendarserver.tap.util import pgConnectorFromConfig
-from calendarserver.tap.util import oracleConnectorFromConfig
from calendarserver.push.notifier import PushDistributor
from calendarserver.push.amppush import AMPPushMaster, AMPPushForwarder
from calendarserver.push.applepush import ApplePushNotifierService
-from txdav.caldav.datastore.scheduling.imip.inbound import MailRetriever
-from twistedcaldav.directory.directory import scheduleNextGroupCachingUpdate
-from txdav.caldav.datastore.scheduling.imip.inbound import scheduleNextMailPoll
try:
from calendarserver.version import version
@@ -131,7 +123,6 @@
log = Logger()
-from twisted.python.util import uidFromString, gidFromString
# Control socket message-routing constants.
@@ -925,8 +916,8 @@
# Change default log level to "info" as its useful to have
# that during startup
#
- oldLogLevel = logLevelForNamespace(None)
- setLogLevelForNamespace(None, LogLevel.info)
+ oldLogLevel = log.publisher.levels.logLevelForNamespace(None)
+ log.publisher.levels.setLogLevelForNamespace(None, LogLevel.info)
# Note: 'additional' was used for IMIP reply resource, and perhaps
# we can remove this
@@ -1076,7 +1067,7 @@
).setServiceParent(connectionService)
# Change log level back to what it was before
- setLogLevelForNamespace(None, oldLogLevel)
+ log.publisher.levels.setLogLevelForNamespace(None, oldLogLevel)
return service
Modified: CalendarServer/trunk/calendarserver/tools/dkimtool.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/dkimtool.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/calendarserver/tools/dkimtool.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -15,24 +15,26 @@
# limitations under the License.
##
+import sys
from Crypto.PublicKey import RSA
from StringIO import StringIO
-from twext.python.log import LogLevel, setLogLevelForNamespace, StandardIOObserver
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks
+from twisted.python.usage import Options
+
+from twext.python.log import Logger, LogLevel, StandardIOObserver
from twext.web2.client.http import ClientRequest
from twext.web2.http_headers import Headers
from twext.web2.stream import MemoryStream
-from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks
-from twisted.python.usage import Options
-
from txdav.caldav.datastore.scheduling.ischedule.dkim import RSA256, DKIMRequest, \
PublicKeyLookup, DKIMVerifier, DKIMVerificationError
-import sys
+log = Logger()
+
def _doKeyGeneration(options):
key = RSA.generate(options["key-size"])
@@ -66,7 +68,7 @@
def _doRequest(options):
if options["verbose"]:
- setLogLevelForNamespace("txdav.caldav.datastore.scheduling.ischedule.dkim", LogLevel.debug)
+ log.publisher.levels.setLogLevelForNamespace("txdav.caldav.datastore.scheduling.ischedule.dkim", LogLevel.debug)
# Parse the HTTP file
request = open(options["request"]).read()
@@ -299,7 +301,7 @@
observer.start()
if options["verbose"]:
- setLogLevelForNamespace("txdav.caldav.datastore.scheduling.ischedule.dkim", LogLevel.debug)
+ log.publisher.levels.setLogLevelForNamespace("txdav.caldav.datastore.scheduling.ischedule.dkim", LogLevel.debug)
if options["key-gen"]:
_doKeyGeneration(options)
Modified: CalendarServer/trunk/calendarserver/tools/loadaugmentdb.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/loadaugmentdb.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/calendarserver/tools/loadaugmentdb.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -16,15 +16,13 @@
##
from __future__ import print_function
-from calendarserver.tools.managetimezones import StandardIOObserver
-from calendarserver.tools.util import loadConfig, getDirectory, \
- autoDisableMemcached
-
-from getopt import getopt, GetoptError
+import os
+import sys
from grp import getgrnam
from pwd import getpwnam
+from getopt import getopt, GetoptError
-from twext.python.log import LogLevel, setLogLevelForNamespace
+from twext.python.log import LogLevel, Logger
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
@@ -34,9 +32,14 @@
from twistedcaldav.directory import augment
from twistedcaldav.directory.augment import AugmentXMLDB
-import os
-import sys
+from calendarserver.tools.managetimezones import StandardIOObserver
+from calendarserver.tools.util import loadConfig, getDirectory, \
+ autoDisableMemcached
+log = Logger()
+
+
+
class UsageError (StandardError):
pass
@@ -109,7 +112,7 @@
#
try:
loadConfig(configFileName)
- setLogLevelForNamespace(None, LogLevel.warn)
+ log.publisher.levels.setLogLevelForNamespace(None, LogLevel.warn)
# Shed privileges
if config.UserName and config.GroupName and os.getuid() == 0:
Modified: CalendarServer/trunk/calendarserver/tools/resources.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/resources.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/calendarserver/tools/resources.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -17,26 +17,36 @@
##
from __future__ import print_function
-from calendarserver.tools.util import loadConfig, getDirectory, setupMemcached, checkDirectory
-from getopt import getopt, GetoptError
+import os
+import sys
from grp import getgrnam
from pwd import getpwnam
-from twext.python.log import StandardIOObserver
-from twext.python.log import clearLogLevels
+from getopt import getopt, GetoptError
+
from twisted.internet import reactor
from twisted.internet.defer import inlineCallbacks
from twisted.python.util import switchUID
+
+from twext.python.log import Logger, StandardIOObserver
+
from twistedcaldav.config import config, ConfigurationError
from twistedcaldav.directory.appleopendirectory import OpenDirectoryService
from twistedcaldav.directory.directory import DirectoryService, DirectoryError
from twistedcaldav.directory.xmlfile import XMLDirectoryService
-import os
-import sys
from calendarserver.platform.darwin.od import dsattributes
+from calendarserver.tools.util import loadConfig, getDirectory, setupMemcached, checkDirectory
-__all__ = [ "migrateResources", ]
+log = Logger()
+
+
+__all__ = [
+ "migrateResources",
+]
+
+
+
def usage():
name = os.path.basename(sys.argv[0])
@@ -99,7 +109,7 @@
# Do this first, because modifying the config object will cause
# some logging activity at whatever log level the plist says
- clearLogLevels()
+ log.publisher.levels.clearLogLevels()
config.DefaultLogLevel = "info" if verbose else "error"
Modified: CalendarServer/trunk/calendarserver/tools/upgrade.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/upgrade.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/calendarserver/tools/upgrade.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -26,17 +26,20 @@
import time
from twisted.python.text import wordWrap
-from twisted.python import log
from twisted.python.usage import Options, UsageError
+from twext.python.log import Logger, LogLevel
+
from twistedcaldav.stdconfig import DEFAULT_CONFIG_FILE
-from calendarserver.tools.cmdline import utilityMain
from twisted.application.service import Service
-
-from twext.python.log import LogLevel, setLogLevelForNamespace
+from calendarserver.tools.cmdline import utilityMain
from calendarserver.tap.caldav import CalDAVServiceMaker
+log = Logger()
+
+
+
def usage(e=None):
if e:
print(e)
@@ -180,8 +183,7 @@
try:
output = options.openOutput()
except IOError, e:
- stderr.write("Unable to open output file for writing: %s\n" %
- (e))
+ stderr.write("Unable to open output file for writing: %s\n" % (e))
sys.exit(1)
if options.merge:
@@ -189,30 +191,25 @@
data.MergeUpgrades = True
config.addPostUpdateHooks([setMerge])
-
def makeService(store):
return UpgraderService(store, options, output, reactor, config)
-
def onlyUpgradeEvents(event):
- output.write(logDateString() + ' ' + log.textFromEventDict(event) + "\n")
+ output.write(logDateString() + " " + log.textFromEventDict(event) + "\n")
output.flush()
if not options["status"]:
- setLogLevelForNamespace(None, LogLevel.debug)
+ log.publisher.levels.setLogLevelForNamespace(None, LogLevel.debug)
log.addObserver(onlyUpgradeEvents)
-
def customServiceMaker():
customService = CalDAVServiceMaker()
customService.doPostImport = options["postprocess"]
return customService
-
def _patchConfig(config):
config.FailIfUpgradeNeeded = options["status"]
-
def _onShutdown():
if not UpgraderService.started:
print("Failed to start service.")
Modified: CalendarServer/trunk/contrib/performance/loadtest/test_sim.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/test_sim.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/contrib/performance/loadtest/test_sim.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -195,7 +195,7 @@
def run(self):
for thunk in self._whenRunning:
thunk()
- msg(self.message)
+ msg(thingo=self.message)
for _ignore_phase, event, thunk in self._triggers:
if event == 'shutdown':
thunk()
@@ -535,4 +535,6 @@
self.assertEquals(io.getvalue(), "\n*** PASS\n")
self.assertTrue(observers[0].reported)
self.assertEquals(
- observers[0].events[0]['message'], (Reactor.message,))
+ [e for e in observers[0].events if "thingo" in e][0]["thingo"],
+ Reactor.message
+ )
Modified: CalendarServer/trunk/twext/python/log.py
===================================================================
--- CalendarServer/trunk/twext/python/log.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/twext/python/log.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -51,15 +51,11 @@
# TODO List:
#
# * Monkey patch logging in Twisted to use our LegacyLogger to sprinkle betterness everywhere
-# * Move namespace settings to Filter class
#
__all__ = [
"InvalidLogLevelError",
"LogLevel",
- "logLevelForNamespace",
- "setLogLevelForNamespace",
- "clearLogLevels",
"formatEvent",
"Logger",
"LegacyLogger",
@@ -141,65 +137,6 @@
}
-#
-# Tools for managing log levels
-#
-
-def logLevelForNamespace(namespace):
- """
- @param namespace: a logging namespace, or C{None} for the default
- namespace.
-
- @return: the L{LogLevel} for the specified namespace.
- """
- if not namespace:
- return logLevelsByNamespace[None]
-
- if namespace in logLevelsByNamespace:
- return logLevelsByNamespace[namespace]
-
- segments = namespace.split(".")
- index = len(segments) - 1
-
- while index > 0:
- namespace = ".".join(segments[:index])
- if namespace in logLevelsByNamespace:
- return logLevelsByNamespace[namespace]
- index -= 1
-
- return logLevelsByNamespace[None]
-
-
-def setLogLevelForNamespace(namespace, level):
- """
- Sets the global log level for a logging namespace.
-
- @param namespace: a logging namespace
-
- @param level: the L{LogLevel} for the given namespace.
- """
- if level not in LogLevel.iterconstants():
- raise InvalidLogLevelError(level)
-
- if namespace:
- logLevelsByNamespace[namespace] = level
- else:
- logLevelsByNamespace[None] = level
-
-
-def clearLogLevels():
- """
- Clears all global log levels to the default.
- """
- logLevelsByNamespace.clear()
- logLevelsByNamespace[None] = LogLevel.warn # Default log level
-
-
-logLevelsByNamespace = {}
-clearLogLevels()
-
-
-
##
# Loggers
##
@@ -296,6 +233,10 @@
"""
Logging object.
"""
+
+ publisher = lambda e: None
+
+
def __init__(self, namespace=None, source=None):
"""
@param namespace: The namespace for this logger. Uses a dotted
@@ -416,23 +357,7 @@
self.emit(level, format, log_failure=failure, **kwargs)
- def level(self):
- """
- @return: the global log level for this logger's namespace.
- """
- return logLevelForNamespace(self.namespace)
-
- def setLevel(self, level):
- """
- Set the global log level for this logger's namespace.
-
- @param level: a L{LogLevel}
- """
- setLogLevelForNamespace(self.namespace, level)
-
-
-
class LegacyLogger(Logger):
"""
A L{Logger} that provides some compatibility with the L{twisted.python.log}
@@ -654,11 +579,70 @@
lower than the log level for the event's namespace.
"""
+ def __init__(self):
+ # FIXME: Make this a class variable. But that raises an
+ # _initializeEnumerants constants error in Twisted 12.2.0.
+ self.defaultLogLevel = LogLevel.info
+
+ self._logLevelsByNamespace = {}
+ self.clearLogLevels()
+
+
+ def logLevelForNamespace(self, namespace):
+ """
+ @param namespace: a logging namespace, or C{None} for the default
+ namespace.
+
+ @return: the L{LogLevel} for the specified namespace.
+ """
+ if not namespace:
+ return self._logLevelsByNamespace[None]
+
+ if namespace in self._logLevelsByNamespace:
+ return self._logLevelsByNamespace[namespace]
+
+ segments = namespace.split(".")
+ index = len(segments) - 1
+
+ while index > 0:
+ namespace = ".".join(segments[:index])
+ if namespace in self._logLevelsByNamespace:
+ return self._logLevelsByNamespace[namespace]
+ index -= 1
+
+ return self._logLevelsByNamespace[None]
+
+
+ def setLogLevelForNamespace(self, namespace, level):
+ """
+ Sets the global log level for a logging namespace.
+
+ @param namespace: a logging namespace
+
+ @param level: the L{LogLevel} for the given namespace.
+ """
+ if level not in LogLevel.iterconstants():
+ raise InvalidLogLevelError(level)
+
+ if namespace:
+ self._logLevelsByNamespace[namespace] = level
+ else:
+ self._logLevelsByNamespace[None] = level
+
+
+ def clearLogLevels(self):
+ """
+ Clears all global log levels to the default.
+ """
+ self._logLevelsByNamespace.clear()
+ self._logLevelsByNamespace[None] = self.defaultLogLevel
+
+
def __call__(self, event):
level = event["log_level"]
namespace = event["log_namespace"]
- if level < logLevelForNamespace(namespace):
+ if level < self.logLevelForNamespace(namespace):
return PredicateResult.no
return PredicateResult.maybe
@@ -718,13 +702,12 @@
# FIXME: This could have a better name.
class DefaultLogPublisher(object):
"""
- The default log publisher. This observer sets up a set of chained observers
- as follows:
+ This observer sets up a set of chained observers as follows:
1. B{rootPublisher} - a L{LogPublisher}
- 2. B{filteringObserver}: a L{FilteringLogObserver} that filters out
- messages using a L{LogLevelFilterPredicate}
+ 2. B{filters}: a L{FilteringLogObserver} that filters out messages
+ using a L{LogLevelFilterPredicate}
3. B{filteredPublisher} - a L{LogPublisher}
@@ -764,8 +747,9 @@
def __init__(self):
self.legacyLogObserver = LegacyLogObserver(twistedLogMessage)
self.filteredPublisher = LogPublisher(self.legacyLogObserver)
- self.filteringObserver = FilteringLogObserver(self.filteredPublisher, (LogLevelFilterPredicate(),))
- self.rootPublisher = LogPublisher(self.filteringObserver)
+ self.levels = LogLevelFilterPredicate()
+ self.filters = FilteringLogObserver(self.filteredPublisher, (self.levels,))
+ self.rootPublisher = LogPublisher(self.filters)
def __call__(self, event):
@@ -773,6 +757,10 @@
+Logger.publisher = DefaultLogPublisher()
+
+
+
#
# Utilities
#
@@ -817,20 +805,13 @@
@rtype: L{unicode}
"""
return unicode(
- formatter.vformat(formatString, (), CallMapping(mapping))
+ theFormatter.vformat(formatString, (), CallMapping(mapping))
)
-formatter = Formatter()
+theFormatter = Formatter()
-#
-# Wire up default publisher
-#
-Logger.publisher = DefaultLogPublisher()
-
-
-
######################################################################
# FIXME: This may not be needed; look into removing it.
Modified: CalendarServer/trunk/twext/python/test/test_log.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_log.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/twext/python/test/test_log.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -22,18 +22,20 @@
from twext.python.log import (
LogLevel, InvalidLogLevelError,
- logLevelsByNamespace,
- logLevelForNamespace, setLogLevelForNamespace, clearLogLevels,
pythonLogLevelMapping,
formatEvent, formatWithCall,
Logger, LegacyLogger,
ILogObserver, LogPublisher,
FilteringLogObserver, PredicateResult,
+ LogLevelFilterPredicate,
)
-defaultLogLevel = logLevelsByNamespace[None]
+defaultLogLevel = LogLevelFilterPredicate().defaultLogLevel
+clearLogLevels = Logger.publisher.levels.clearLogLevels
+logLevelForNamespace = Logger.publisher.levels.logLevelForNamespace
+setLogLevelForNamespace = Logger.publisher.levels.setLogLevelForNamespace
@@ -343,14 +345,15 @@
Test that log levels and messages are emitted correctly for
Logger.
"""
- # FIXME:Need a basic test like this for logger attached to a class.
+ # FIXME: Need a basic test like this for logger attached to a class.
# At least: source should not be None in that case.
+ log = TestLogger()
+
for level in LogLevel.iterconstants():
format = "This is a {level_name} message"
message = format.format(level_name=level.name)
- log = TestLogger()
method = getattr(log, level.name)
method(format, junk=message, level_name=level.name)
@@ -359,7 +362,7 @@
self.assertEquals(log.emitted["format"], format)
self.assertEquals(log.emitted["kwargs"]["junk"], message)
- if level >= log.level():
+ if level >= logLevelForNamespace(log.namespace):
self.assertEquals(log.event["log_format"], format)
self.assertEquals(log.event["log_level"], level)
self.assertEquals(log.event["log_namespace"], __name__)
@@ -422,18 +425,6 @@
self.assertEquals(log.event["log_source"], None)
- def test_setLevel(self):
- """
- Set level on the logger directly.
- """
- log = Logger()
-
- for level in (LogLevel.error, LogLevel.info):
- log.setLevel(level)
- self.assertIdentical(level, log.level())
- self.assertIdentical(level, logLevelForNamespace(log.namespace))
-
-
def test_logInvalidLogLevel(self):
"""
Test passing in a bogus log level to C{emit()}.
Modified: CalendarServer/trunk/twistedcaldav/stdconfig.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/stdconfig.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/twistedcaldav/stdconfig.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -15,33 +15,32 @@
# limitations under the License.
##
-from socket import getfqdn
-from socket import gethostbyname
+import os
import copy
-import os
import re
+from socket import getfqdn, gethostbyname
-from txdav.xml import element as davxml
-from twext.web2.dav.resource import TwistedACLInheritable
+from twisted.python.runtime import platform
from twext.python.plistlib import PlistParser #@UnresolvedImport
-from twext.python.log import Logger, InvalidLogLevelError
-from twext.python.log import clearLogLevels, LogLevel, setLogLevelForNamespace
+from twext.python.log import Logger, InvalidLogLevelError, LogLevel
+from twext.web2.dav.resource import TwistedACLInheritable
+from txdav.xml import element as davxml
+
from twistedcaldav import caldavxml, customxml, carddavxml, mkcolxml
from twistedcaldav.config import ConfigProvider, ConfigurationError, ConfigDict
from twistedcaldav.config import config, mergeData, fullServerPath
from twistedcaldav.util import getPasswordFromKeychain
from twistedcaldav.util import KeychainAccessError, KeychainPasswordNotFound
+from twistedcaldav.util import computeProcessCount
-from twisted.python.runtime import platform
-
from calendarserver.push.util import getAPNTopicFromCertificate
-from twistedcaldav.util import computeProcessCount
-
log = Logger()
+
+
if platform.isMacOSX():
DEFAULT_CONFIG_FILE = "/Applications/Server.app/Contents/ServerRoot/private/etc/caldavd/caldavd-apple.plist"
else:
@@ -1377,17 +1376,21 @@
def _updateLogLevels(configDict, reloading=False):
- clearLogLevels()
+ log.publisher.levels.clearLogLevels()
try:
if "DefaultLogLevel" in configDict:
levelName = configDict["DefaultLogLevel"]
if levelName:
- setLogLevelForNamespace(None, LogLevel.levelWithName(levelName))
+ log.publisher.levels.setLogLevelForNamespace(
+ None, LogLevel.levelWithName(levelName)
+ )
if "LogLevels" in configDict:
for namespace, levelName in configDict["LogLevels"].iteritems():
- setLogLevelForNamespace(namespace, LogLevel.levelWithName(levelName))
+ log.publisher.levels.setLogLevelForNamespace(
+ namespace, LogLevel.levelWithName(levelName)
+ )
except InvalidLogLevelError, e:
raise ConfigurationError("Invalid log level: %s" % (e.level))
Modified: CalendarServer/trunk/twistedcaldav/test/test_cache.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_cache.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/twistedcaldav/test/test_cache.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -388,7 +388,6 @@
memcacheStub = InMemoryMemcacheProtocol()
self.rc = MemcacheResponseCache(None, cachePool=memcacheStub)
- self.rc.log.setLevel(LogLevel.debug)
self.tokens = {}
self.tokens['/calendars/__uids__/cdaboo/'] = 'uriToken0'
Modified: CalendarServer/trunk/twistedcaldav/test/test_config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_config.py 2013-06-17 20:55:09 UTC (rev 11378)
+++ CalendarServer/trunk/twistedcaldav/test/test_config.py 2013-06-18 00:44:18 UTC (rev 11379)
@@ -14,16 +14,20 @@
# limitations under the License.
##
+import socket
+
from twext.python.plistlib import writePlist #@UnresolvedImport
-from twext.python.log import LogLevel, logLevelForNamespace
+from twext.python.log import LogLevel
+from twext.python.test.test_log import defaultLogLevel, logLevelForNamespace
from twistedcaldav.config import config, ConfigDict, mergeData
from twistedcaldav.resource import CalDAVResource
from twistedcaldav.stdconfig import DEFAULT_CONFIG, PListConfigProvider, \
RELATIVE_PATHS
from twistedcaldav.test.util import TestCase
-import socket
+
+
testConfig = """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
@@ -36,7 +40,7 @@
<integer>8008</integer>
<key>DefaultLogLevel</key>
- <string>info</string>
+ <string>error</string>
<key>LogLevels</key>
<dict>
<key>some.namespace</key>
@@ -66,6 +70,8 @@
</plist>
"""
+
+
def _testResponseCompression(testCase):
testCase.assertEquals(config.ResponseCompression, False)
@@ -328,22 +334,27 @@
"""
Logging module configures properly.
"""
+ self.assertNotEqual(
+ defaultLogLevel, LogLevel.error,
+ "This test assumes the default log level is not error."
+ )
+
config.setDefaults(DEFAULT_CONFIG)
config.reload()
- self.assertEquals(logLevelForNamespace(None), LogLevel.warn)
- self.assertEquals(logLevelForNamespace("some.namespace"), LogLevel.warn)
+ self.assertEquals(logLevelForNamespace(None), defaultLogLevel)
+ self.assertEquals(logLevelForNamespace("some.namespace"), defaultLogLevel)
config.load(self.testConfig)
- self.assertEquals(logLevelForNamespace(None), LogLevel.info)
+ self.assertEquals(logLevelForNamespace(None), LogLevel.error)
self.assertEquals(logLevelForNamespace("some.namespace"), LogLevel.debug)
writePlist({}, self.testConfig)
config.reload()
- self.assertEquals(logLevelForNamespace(None), LogLevel.warn)
- self.assertEquals(logLevelForNamespace("some.namespace"), LogLevel.warn)
+ self.assertEquals(logLevelForNamespace(None), defaultLogLevel)
+ self.assertEquals(logLevelForNamespace("some.namespace"), defaultLogLevel)
def test_ConfigDict(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130617/28babc10/attachment-0001.html>
More information about the calendarserver-changes
mailing list