Fix issue of double logging in ipa_error.log.

We open the log in ipa_webgui and this was being inherited by TurboGears
which uses the same log so everything was getting logged twice. Shut down
the log in ipa_webgui at the last possible moment. This will not catch
configuration errors.

Add a Not Found template.

Only print a traceback on 500 errors.
This commit is contained in:
Rob Crittenden 2008-05-28 13:59:19 -04:00
parent c58b7a3d7c
commit 9bcd31efc5
6 changed files with 60 additions and 4 deletions

View File

@ -140,11 +140,13 @@ def main():
if devel:
logging.basicConfig(level=loglevel,
format='%(asctime)s %(name)s %(levelname)s %(message)s',
stream=sys.stderr)
else:
# This log file name needs to be kept in sync with the one in
# ipa_webgui.cfg
logging.basicConfig(level=loglevel,
format='%(asctime)s %(name)s %(levelname)s %(message)s',
filename='/var/log/ipa_error.log')
sys.path.append("/usr/share/ipa")
@ -159,6 +161,11 @@ def main():
import cherrypy
cherrypy.lowercase_api = True
# Shut down the logging set up here so that CherryPy logging can take
# over. TurboGears configuration errors will not be caught.
if not devel:
logging.shutdown()
# Load the config - look for a local file first for development
# and then the system config file
if devel:

View File

@ -95,10 +95,12 @@ args='(sys.stdout,)'
level='DEBUG'
qualname='ipagui'
handlers=['debug_out']
propagate=0
[[[allinfo]]]
level='INFO'
handlers=['debug_out']
propagate=0
[[[access]]]
level='INFO'

View File

@ -88,6 +88,7 @@ identity.provider='proxyprovider'
# identity associated with a request? Comma separated list of identity sources.
# Valid sources: form, visit, http_auth
# identity.source="form,http_auth,visit"
identity.source="visit"
# compress the data sends to the web browser
# [/]

View File

@ -84,11 +84,14 @@ class Root(controllers.RootController):
"""This method is derived from the sample error catcher on
http://docs.turbogears.org/1.0/ErrorReporting."""
try:
cherrypy._cputil._cp_on_http_error(status, message)
error_msg = self._error_codes.get(status, self._error_codes[None])
url = "%s %s" % (cherrypy.request.method, cherrypy.request.path)
log.exception("CherryPy %s error (%s) for request '%s'", status,
error_msg, url)
if (status == 500):
log.exception("%s error (%s) for request '%s'", status,
error_msg, url)
else:
log.error("%s error (%s) for request '%s'", status,
error_msg, url)
if config.get('server.environment') == 'production':
details = ''
@ -106,9 +109,14 @@ class Root(controllers.RootController):
details = details,
)
if status == 404:
page_template = 'ipagui.templates.not_found'
else:
page_template = 'ipagui.templates.unhandled_exception'
body = controllers._process_output(
data,
'ipagui.templates.unhandled_exception',
page_template,
'html',
'text/html',
None

View File

@ -25,6 +25,7 @@ app_DATA = \
ipapolicyshow.kid \
loginfailed.kid \
master.kid \
not_found.kid \
policyindex.kid \
policylayout.kid \
principallayout.kid \

View File

@ -0,0 +1,37 @@
<!--
Copyright (C) 2007-2008 Red Hat
see file 'COPYING' for use and warranty information
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; version 2 only
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://purl.org/kid/ns#"
py:extends="'master.kid'">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
<title>Page Not Found</title>
</head>
<body>
<div id="main_content">
<h1>Page Not Found</h1>
<div py:if='message'>
${message}
</div>
</div>
</body>
</html>