source: TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/securityservices.ini @ 5254

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/ndg.security.test/ndg/security/test/integration/authz/securityservices.ini@5254
Revision 5254, 22.5 KB checked in by pjkersha, 11 years ago (diff)

Added additional debug logging and improved error handling

Line 
1#
2# NERC DataGrid Security
3#
4# Paste configuration for combined Session Manager, Attribute Authority,
5# OpenID Relying Party and Provider services
6#
7# The %(here)s variable will be replaced with the parent directory of this file
8#
9# Author: P J Kershaw
10# date: 26/02/09
11# Copyright: (C) 2009 Science and Technology Facilities Council
12# license: BSD - see LICENSE file in top-level directory
13# Contact: Philip.Kershaw@stfc.ac.uk
14# Revision: $Id$
15
16[DEFAULT]
17portNum = 7443
18hostname = localhost
19scheme = http
20baseURI = %(scheme)s://%(hostname)s:%(portNum)s
21openIDProviderIDBase = /openid
22openIDProviderIDSelectURI = %(baseURI)s%(openIDProviderIDBase)s
23testConfigDir = %(here)s/../../config
24sessionManagerPath = /SessionManager
25sessionManagerURI = %(baseURI)s%(sessionManagerPath)s
26openid.ax.sessionManagerURI.typeURI=urn:ndg:security:openid:sessionManagerURI
27openid.ax.sessionId.typeURI=urn:ndg:security:openid:sessionId
28
29#______________________________________________________________________________
30# Attribute Authority settings
31# 'name' setting MUST agree with map config file 'thisHost' name attribute
32attributeAuthority.name: Site A
33
34# Lifetime is measured in seconds
35attributeAuthority.attCertLifetime: 28800 
36
37# Allow an offset for clock skew between servers running
38# security services. NB, measured in seconds - use a minus sign for time in the
39# past
40attributeAuthority.attCertNotBeforeOff: 0
41
42# All Attribute Certificates issued are recorded in this dir
43attributeAuthority.attCertDir: %(testConfigDir)s/attributeauthority/sitea/attributeCertificateLog
44
45# Files in attCertDir are stored using a rotating file handler
46# attCertFileLogCnt sets the max number of files created before the first is
47# overwritten
48attributeAuthority.attCertFileName: ac.xml
49attributeAuthority.attCertFileLogCnt: 16
50attributeAuthority.dnSeparator:/
51
52# Location of role mapping file
53attributeAuthority.mapConfigFile: %(testConfigDir)s/attributeauthority/sitea/siteAMapConfig.xml
54
55# Settings for custom AttributeInterface derived class to get user roles for given
56# user ID
57attributeAuthority.attributeInterface.modFilePath: %(testConfigDir)s/attributeauthority/sitea
58attributeAuthority.attributeInterface.modName: siteAUserRoles
59attributeAuthority.attributeInterface.className: TestUserRoles
60
61# Config for XML signature of Attribute Certificate
62attributeAuthority.signingPriKeyFilePath: %(testConfigDir)s/attributeauthority/sitea/siteA-aa.key
63attributeAuthority.signingCertFilePath: %(testConfigDir)s/attributeauthority/sitea/siteA-aa.crt
64attributeAuthority.caCertFilePathList: %(testConfigDir)s/ca/ndg-test-ca.crt
65
66#______________________________________________________________________________
67# Session Manager specific settings - commented out settings will take their
68# default settings.  To override the defaults uncomment and set as required.
69# See ndg.security.server.sessionmanager module for details
70
71# Credential Wallet Settings - global to all user sessions
72#
73# CA certificates for Attribute Certificate signature validation
74sessionManager.credentialWallet.caCertFilePathList=%(testConfigDir)s/ca/ndg-test-ca.crt
75
76# CA certificates for SSL connection peer cert. validation - required if
77# connecting to an Attribute Authority over SSL
78sessionManager.credentialWallet.sslCACertFilePathList=%(testConfigDir)s/ca/ndg-test-ca.crt
79
80# Allow Get Attribute Certificate calls to try to get a mapped certificate
81# from another organisation trusted by the target Attribute Authority
82sessionManager.credentialWallet.mapFromTrustedHosts=True
83sessionManager.credentialWallet.rtnExtAttCertList=True
84
85# Refresh an Attribute Certificate, if an existing one in the wallet has only
86# this length of time left before it expires
87credentialWallet.attCertRefreshElapse=7200
88
89# Pointer to WS-Security settings.  These WS-Security settings are for use
90# by user credential wallets held in user sessions hosted by the Session
91# Manager.  They enable individual wallets to query Attribute Authorities for
92# user Attribute Certificates.  Nb. the difference between these settings and
93# the WS-Security section for handling requests to the Session Manager.
94#
95# Settings are identified by a prefix. 
96sessionManager.credentialWallet.wssCfgPrefix=sessionManager.credentialWallet.wssecurity
97
98# ...A section name could also be used.
99#sessionManager.credentialWallet.wssCfgSection=
100
101# SOAP Signature Handler settings for the Credential Wallet's Attribute
102# Authority interface
103#
104# CA Certificates used to verify X.509 certs used in Attribute Certificates.
105# The CA certificates of other NDG trusted sites should go here.  NB, multiple
106# values should be delimited by a space
107sessionManager.credentialWallet.wssecurity.caCertFilePathList: %(testConfigDir)s/ca/ndg-test-ca.crt
108
109# Signature of an outbound message
110#
111# Certificate associated with private key used to sign a message.  The sign
112# method will add this to the BinarySecurityToken element of the WSSE header. 
113# binSecTokValType attribute must be set to 'X509' or 'X509v3' ValueType. 
114# As an alternative, use signingCertChain - see below...
115
116# PEM encoded cert
117sessionManager.credentialWallet.wssecurity.signingCertFilePath: %(testConfigDir)s/sessionmanager/sm.crt
118
119# ... or provide file path to PEM encoded private key file
120sessionManager.credentialWallet.wssecurity.signingPriKeyFilePath: %(testConfigDir)s/sessionmanager/sm.key
121
122# Set the ValueType for the BinarySecurityToken added to the WSSE header for a
123# signed message.  See __setReqBinSecTokValType method and binSecTokValType
124# class variable for options - it may be one of X509, X509v3, X509PKIPathv1 or
125# give full namespace to alternative - see
126# ZSI.wstools.Namespaces.OASIS.X509TOKEN
127#
128# binSecTokValType determines whether signingCert or signingCertChain
129# attributes will be used.
130sessionManager.credentialWallet.wssecurity.reqBinSecTokValType: X509v3
131
132# Add a timestamp element to an outbound message
133sessionManager.credentialWallet.wssecurity.addTimestamp: True
134
135# For WSSE 1.1 - service returns signature confirmation containing signature
136# value sent by client
137sessionManager.credentialWallet.wssecurity.applySignatureConfirmation: True
138
139# Authentication service properties
140sessionManager.authNService.moduleFilePath: 
141sessionManager.authNService.moduleName: ndg.security.test.config.sessionmanager.userx509certauthn
142sessionManager.authNService.className: UserX509CertAuthN
143
144# Specific settings for UserCertAuthN Session Manager authentication plugin
145# This sets up PKI credentials for a single test account
146sessionManager.authNService.userX509CertFilePath: %(testConfigDir)s/pki/user.crt
147sessionManager.authNService.userPriKeyFilePath: %(testConfigDir)s/pki/user.key
148sessionManager.authNService.userPriKeyPwd: testpassword
149
150[server:main]
151use = egg:Paste#http
152host = 0.0.0.0
153port = %(portNum)s
154
155[filter-app:OpenIDProviderApp]
156use = egg:Paste#httpexceptions
157next = cascade
158
159# Composite for OpenID Provider to enable settings for picking up static
160# content
161[composit:cascade]
162use = egg:Paste#cascade
163app1 = OpenIDProviderStaticContent
164app2 = OpenIDProviderMiddlewareApp
165catch = 404
166
167[app:OpenIDProviderStaticContent]
168use = egg:Paste#static
169document_root = %(here)s/openidprovider
170
171[pipeline:main]
172pipeline = wsseSignatureVerificationFilter
173                   AttributeAuthorityFilter
174           SessionManagerFilter
175           wsseSignatureFilter
176                   SessionMiddlewareFilter
177                   OpenIDRelyingPartyFilter
178                   OpenIDProviderApp
179
180#______________________________________________________________________________
181# Beaker Session Middleware (used by OpenID Provider Filter)
182[filter:SessionMiddlewareFilter]
183paste.filter_app_factory=beaker.middleware:SessionMiddleware
184beaker.session.key = openid
185beaker.session.secret = qKEdQdCr33NE087dRUWX3qUv5r7AsuQU
186# These options enable cookie only type sessions with the cookie content
187# encrypted
188#beaker.session.type = cookie
189#beaker.session.validate_key = 0123456789abcdef
190#beaker.session.encrypt_key = fedcba9876543210
191
192# If you'd like to fine-tune the individual locations of the cache data dirs
193# for the Cache data, or the Session saves, un-comment the desired settings
194# here:
195beaker.cache.data_dir = %(here)s/openidprovider/beaker/cache
196beaker.session.data_dir = %(here)s/openidprovider/beaker/sessions
197
198[filter:OpenIDRelyingPartyFilter]
199paste.filter_app_factory = 
200        ndg.security.server.wsgi.openid.relyingparty:OpenIDRelyingPartyMiddleware.filter_app_factory
201
202openid.relyingparty.sessionKey = beaker.session
203openid.relyingparty.baseURL = %(authkit.openid.baseurl)s
204#openid.relyingparty.signinInterfaceMiddlewareClass = ndg.security.test.integration.openid.openidrelyingparty.signin_interface.CombinedSigninAndLoginInterface
205#openid.relyingparty.signinInterface.templatePackage = ndg.security.test.integration.openid.openidrelyingparty.templates
206openid.relyingparty.signinInterfaceMiddlewareClass = ndg.security.server.wsgi.openid.relyingparty.signin_interface.buffet.BuffetSigninTemplate
207openid.relyingparty.signinInterface.templatePackage = ndg.security.server.wsgi.openid.relyingparty.signin_interface.buffet.templates
208openid.relyingparty.signinInterface.staticContentRootDir = %(here)s/openidrelyingparty/public
209openid.relyingparty.signinInterface.baseURL = %(openid.relyingparty.baseURL)s
210openid.relyingparty.signinInterface.initialOpenID = %(openIDProviderIDSelectURI)s
211openid.relyingparty.signinInterface.leftLogo = %(openid.relyingparty.signinInterface.baseURL)s/layout/NERC_Logo.gif
212openid.relyingparty.signinInterface.leftAlt = Natural Environment Research Council
213openid.relyingparty.signinInterface.ndgLink = http://ndg.nerc.ac.uk/
214openid.relyingparty.signinInterface.ndgImage = %(openid.relyingparty.signinInterface.baseURL)s/layout/ndg_logo_circle.gif
215openid.relyingparty.signinInterface.disclaimer = This site is for test purposes only and is under active development.
216openid.relyingparty.signinInterface.stfcLink = http://www.stfc.ac.uk/
217openid.relyingparty.signinInterface.stfcImage = %(openid.relyingparty.signinInterface.baseURL)s/layout/stfc-circle-sm.gif
218openid.relyingparty.signinInterface.helpIcon = %(openid.relyingparty.signinInterface.baseURL)s/layout/icons/help.png
219
220cache_dir = %(here)s/data
221
222# AuthKit Set-up
223authkit.setup.method=openid, cookie
224
225# This cookie name and secret MUST agree with the name used by the
226# Authentication Filter used to secure a given app
227authkit.cookie.name=ndg.security.auth
228authkit.cookie.secret=9wvZObs9anUEhSIAnJNoY2iJq59FfYZr
229authkit.cookie.signoutpath = /logout
230authkit.openid.path.signedin=/
231authkit.openid.store.type=file
232authkit.openid.store.config=%(here)s/openidrelyingparty/store
233authkit.openid.session.key = authkit_openid
234authkit.openid.session.secret = random string
235
236authkit.openid.baseurl = %(baseURI)s
237
238authkit.openid.ax.typeuri.sessionManagerURI=%(openid.ax.sessionManagerURI.typeURI)s
239authkit.openid.ax.required.sessionManagerURI=True
240authkit.openid.ax.alias.sessionManagerURI=sessionManagerURI
241
242authkit.openid.ax.typeuri.sessionId=%(openid.ax.sessionId.typeURI)s
243authkit.openid.ax.required.sessionId=True
244authkit.openid.ax.alias.sessionId=sessionId
245
246# Template for signin
247#authkit.openid.template.obj =
248
249# Handler for parsing OpenID and creating a session from it
250#authkit.openid.urltouser =
251
252#______________________________________________________________________________
253# OpenID Provider WSGI Settings
254[app:OpenIDProviderMiddlewareApp]
255paste.app_factory=ndg.security.server.wsgi.openid.provider:OpenIDProviderMiddleware.app_factory
256openid.provider.path.openidserver=/OpenID/Provider/server
257openid.provider.path.login=/OpenID/Provider/login
258openid.provider.path.loginsubmit=/OpenID/Provider/loginsubmit
259
260# Yadis based discovery only - the 'id' path is configured to return 404 not
261# found - see ndg.security.server.wsgi.openid.provider.renderinginterface.
262# buffet.BuffetRendering class
263openid.provider.path.id=/OpenID/Provider/id/${userIdentifier}
264openid.provider.path.yadis=%(openIDProviderIDBase)s/${userIdentifier}
265
266# Yadis based discovery for idselect mode - this is where the user has entered
267# a URI at the Relying Party which identifies their Provider only and not their
268# full ID URI.  e.g. https://badc.nerc.ac.uk instead of
269# https://badc.nerc.ac.uk/John
270openid.provider.path.serveryadis=%(openIDProviderIDBase)s
271openid.provider.path.allow=/OpenID/Provider/allow
272openid.provider.path.decide=/OpenID/Provider/decide
273openid.provider.path.mainpage=/OpenID/Provider/home
274
275openid.provider.session_middleware=beaker.session
276openid.provider.base_url=%(baseURI)s
277openid.provider.trace=False
278openid.provider.consumer_store_dirpath=%(here)s/openidprovider
279openid.provider.renderingClass=ndg.security.server.wsgi.openid.provider.renderinginterface.buffet.BuffetRendering
280#openid.provider.renderingClass=ndg.security.server.wsgi.openid.provider.DemoRenderingInterface
281
282openid.provider.rendering.templateType = kid
283openid.provider.rendering.templateRoot = ndg.security.server.wsgi.openid.provider.renderinginterface.buffet.templates
284openid.provider.rendering.kid.assume_encoding= utf-8
285openid.provider.rendering.kid.encoding = utf-8
286
287# Layout
288openid.provider.rendering.baseURL = %(openid.provider.base_url)s
289openid.provider.rendering.leftLogo = %(openid.provider.rendering.baseURL)s/layout/NERC_Logo.gif
290openid.provider.rendering.leftAlt = Natural Environment Research Council
291openid.provider.rendering.ndgLink = http://ndg.nerc.ac.uk/
292openid.provider.rendering.ndgImage = %(openid.provider.rendering.baseURL)s/layout/ndg_logo_circle.gif
293openid.provider.rendering.disclaimer = This site is for test purposes only and is under active development.
294openid.provider.rendering.stfcLink = http://www.stfc.ac.uk/
295openid.provider.rendering.stfcImage = %(openid.provider.rendering.baseURL)s/layout/stfc-circle-sm.gif
296openid.provider.rendering.helpIcon = %(openid.provider.rendering.baseURL)s/layout/icons/help.png
297
298
299openid.provider.axResponse.class=ndg.security.server.wsgi.openid.provider.axinterface.sessionmanager.SessionManagerAXInterface
300openid.provider.axResponse.sessionManagerURI=%(sessionManagerURI)s
301openid.provider.axResponse.sessionManagerURITypeURI=%(openid.ax.sessionManagerURI.typeURI)s
302openid.provider.axResponse.sessionIdTypeURI=%(openid.ax.sessionId.typeURI)s
303
304# Basic Authentication interface to demonstrate capabilities
305#openid.provider.authNInterface=ndg.security.server.wsgi.openid.provider.authninterface.basic.BasicAuthNInterface
306#openid.provider.authN.userCreds=pjk:test
307#openid.provider.authN.username2UserIdentifiers=pjk:PhilipKershaw,P.J.Kershaw
308
309# Link Authentication to a Session Manager instance running in the same WSGI
310# stack or on a remote service
311openid.provider.authNInterface=ndg.security.server.wsgi.openid.provider.authninterface.sessionmanager.SessionManagerOpenIDAuthNInterface
312
313# Omit or leave as blank if the Session Manager is accessible locally in the
314# same WSGI stack.
315#openid.provider.authN.sessionManagerURI=
316
317# environ dictionary key to Session Manager WSGI instance held locally.  The
318# setting below is the default and can be omitted if it matches the filterID
319# set for the Session Manager
320openid.provider.authN.environKeyName=filter:SessionManagerFilter
321
322# Database connection to enable check between username and OpenID identifier
323openid.provider.authN.connectionString: postgres://postgres:testpassword@%(hostname)s/testUserDb
324openid.provider.authN.logonSQLQuery: select username from openid where username = '$username' and ident = '$userIdentifier'
325openid.provider.authN.userIdentifiersSQLQuery: select distinct ident from openid where username = '$username'
326
327## Basic Authentication but linking to a Session Manager
328#openid.provider.authNInterface=ndg.security.server.wsgi.openid.provider.authninterface.basic.BasicSessionManagerOpenIDAuthNInterface
329#
330## Connect to a Session Manager at a given URI or see next...
331##openid.provider.authN.sessionManagerURI=
332#
333## environ dictionary key to Session Manager WSGI instance held locally. 
334## The setting below is the default and can be omitted if it matches the
335## filterID set for the Session Manager
336#openid.provider.authN.environKeyName=filter:SessionManagerFilter
337#
338## Link usernames for login to the OpenID identifiers they correspond to.
339## See openid.provider.path.id with $userIdentifier setting
340#openid.provider.authN.username2UserIdentifiers=pjk:PhilipKershaw,P.J.Kershaw
341
342# Basic authentication for testing/admin - comma delimited list of
343# <username>:<password> pairs
344#openid.provider.usercreds=pjk:test
345
346#______________________________________________________________________________
347# Attribute Authority WSGI settings
348#
349[filter:AttributeAuthorityFilter]
350# This filter is a container for a binding to a SOAP based interface to the
351# Attribute Authority
352paste.filter_app_factory = ndg.security.server.wsgi.soap:SOAPBindingMiddleware
353
354# Use this ZSI generated SOAP service interface class to handle i/o for this
355# filter
356ServiceSOAPBindingClass = ndg.security.server.zsi.attributeauthority.AttributeAuthorityWS
357
358# SOAP Binding Class specific keywords are in this section identified by this
359# prefix:
360ServiceSOAPBindingPropPrefix = AttributeAuthority
361
362# The AttributeAuthority class has settings in the default section above
363# identified by this prefix:
364AttributeAuthority.propPrefix = attributeAuthority
365AttributeAuthority.propFilePath = %(here)s/securityservices.ini
366AttributeAuthority.wsseSignatureVerificationFilterID = filter:wsseSignatureVerificationFilter
367
368# Provide an identifier for this filter so that main WSGI app
369# CombinedServicesWSGI Session Manager filter can call this Attribute Authority
370# directly
371referencedFilters = filter:wsseSignatureVerificationFilter
372
373# Path from URL for Attribute Authority in this Paste deployment
374path = /AttributeAuthority
375
376# External endpoint for this Attribute Authority - must agree with setting used
377# to invoke this service set in:
378# * serverapp.py
379# * or port in [server:main] if calling with paster serve securityservices.ini
380# * or something else e.g. proxied through Apache?
381# This setting is used by Attribute Authority clients in this WSGI stack to see
382# if a request is being made to the local service or to another Attribute
383# Authority running elsewhere
384publishedURI = %(baseURI)s%(path)s
385
386# Enable ?wsdl query argument to list the WSDL content
387enableWSDLQuery = True
388charset = utf-8
389filterID = %(__name__)s
390
391#______________________________________________________________________________
392# Session Manager WSGI settings
393#
394[filter:SessionManagerFilter]
395# This filter is a container for a binding to a SOAP based interface to the
396# Session Manager
397paste.filter_app_factory = ndg.security.server.wsgi.soap:SOAPBindingMiddleware
398
399# Use this ZSI generated SOAP service interface class to handle i/o for this
400# filter
401ServiceSOAPBindingClass = ndg.security.server.zsi.sessionmanager.SessionManagerWS
402
403# SOAP Binding Class specific keywords are in this section identified by this
404# prefix:
405ServiceSOAPBindingPropPrefix = SessionManager
406
407# The SessionManager class has settings in the default section above identified
408# by this prefix:
409SessionManager.propPrefix = sessionManager
410SessionManager.propFilePath = %(here)s/securityservices.ini
411
412# This filter references other filters - a local Attribute Authority (optional)
413# and a WS-Security signature verification filter (required if using signature
414# to authenticate user in requests
415SessionManager.attributeAuthorityFilterID = filter:AttributeAuthorityFilter
416SessionManager.wsseSignatureVerificationFilterID = filter:wsseSignatureVerificationFilter
417
418# The SessionManagerWS SOAP interface class needs to know about these other
419# filters
420referencedFilters = filter:wsseSignatureVerificationFilter
421                                        filter:AttributeAuthorityFilter
422
423# Path from URI for Session Manager in this Paste deployment
424path = %(sessionManagerPath)s
425
426# External endpoint for this Session Manager - must agree with setting used to
427# invoke this service set in:
428# * securityservicesapp.py
429# * or port in [server:main] if calling with paster serve securityservices.ini
430# * or something else e.g. proxied through Apache?
431# This setting is used by Session Manager clients in this WSGI stack to see if
432# a request is being made to the local service or to another session manager
433# running elsewhere
434publishedURI = %(sessionManagerURI)s
435
436# Enable ?wsdl query argument to list the WSDL content
437enableWSDLQuery = True
438charset = utf-8
439
440# Provide an identifier for this filter so that main WSGI app
441# CombinedServicesWSGI can call this Session Manager directly
442filterID = %(__name__)s
443
444#______________________________________________________________________________
445# WS-Security Signature Verification
446[filter:wsseSignatureVerificationFilter]
447paste.filter_app_factory = ndg.security.server.wsgi.wssecurity:SignatureVerificationFilter
448filterID = %(__name__)s
449
450# Settings for WS-Security SignatureHandler class used by this filter
451wsseCfgFilePrefix = wssecurity
452
453# Verify against known CAs - Provide a space separated list of file paths
454wssecurity.caCertFilePathList=%(testConfigDir)s/ca/ndg-test-ca.crt
455
456#______________________________________________________________________________
457# Apply WS-Security Signature
458[filter:wsseSignatureFilter]
459paste.filter_app_factory = ndg.security.server.wsgi.wssecurity:ApplySignatureFilter
460
461# Reference the verification filter in order to be able to apply signature
462# confirmation
463referencedFilters = filter:wsseSignatureVerificationFilter
464wsseSignatureVerificationFilterID = filter:wsseSignatureVerificationFilter
465
466# Last filter in chain of SOAP handlers writes the response
467writeResponse = True
468
469# Settings for WS-Security SignatureHandler class used by this filter
470wsseCfgFilePrefix = wssecurity
471
472# Certificate associated with private key used to sign a message.  The sign
473# method will add this to the BinarySecurityToken element of the WSSE header. 
474wssecurity.signingCertFilePath=%(testConfigDir)s/pki/wsse-server.crt
475
476# PEM encoded private key file
477wssecurity.signingPriKeyFilePath=%(testConfigDir)s/pki/wsse-server.key
478
479# Set the ValueType for the BinarySecurityToken added to the WSSE header for a
480# signed message.  See __setReqBinSecTokValType method and binSecTokValType
481# class variable for options - it may be one of X509, X509v3, X509PKIPathv1 or
482# give full namespace to alternative - see
483# ZSI.wstools.Namespaces.OASIS.X509TOKEN
484#
485# binSecTokValType determines whether signingCert or signingCertChain
486# attributes will be used.
487wssecurity.reqBinSecTokValType=X509v3
488
489# Add a timestamp element to an outbound message
490wssecurity.addTimestamp=True
491
492# For WSSE 1.1 - service returns signature confirmation containing signature
493# value sent by client
494wssecurity.applySignatureConfirmation=True
495
496# Logging configuration
497[loggers]
498keys = root, ndg
499
500[handlers]
501keys = console
502
503[formatters]
504keys = generic
505
506[logger_root]
507level = INFO
508handlers = console
509
510[logger_ndg]
511level = DEBUG
512handlers =
513qualname = ndg
514
515[handler_console]
516class = StreamHandler
517args = (sys.stderr,)
518level = NOTSET
519formatter = generic
520
521[formatter_generic]
522format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
523datefmt = %H:%M:%S
524
Note: See TracBrowser for help on using the repository browser.