~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

  • Committer: Matt Nordhoff
  • Date: 2009-06-05 01:59:11 UTC
  • Revision ID: mnordhoff@mattnordhoff.com-20090605015911-blapf1agxclubok1
Fix logging 404 Not Found responses (bug #381029)

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
# along with this program; if not, write to the Free Software
14
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
15
 
16
 
"""A script for starting the loggerhead process."""
 
16
"""
 
17
WARNING! This script has been deprecated and will go away soon!
 
18
A script for starting the loggerhead process.
 
19
"""
17
20
 
18
21
 
19
22
import logging
23
26
import sys
24
27
import urlparse
25
28
 
26
 
from configobj import ConfigObj
 
29
from bzrlib.plugin import load_plugins
 
30
from bzrlib.util.configobj.configobj import ConfigObj
27
31
 
28
32
from paste import httpserver
29
33
from paste.httpexceptions import make_middleware
30
34
from paste.translogger import make_filter
31
35
 
32
 
from loggerhead import daemon, release
 
36
from loggerhead import daemon
33
37
from loggerhead.apps.config import Root
34
 
 
35
 
 
36
 
def make_handler(config, filename):
37
 
    roll = config.get('log.roll', 'never')
38
 
    if roll == 'daily':
39
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 0, 100)
40
 
    elif roll == 'weekly':
41
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'W0', 0, 100)
42
 
    else:
43
 
        h = logging.FileHandler(filename)
44
 
    return h
45
 
 
46
 
 
47
 
def setup_logging(logdir, config, foreground):
48
 
    # i hate that stupid logging config format, so just set up logging here.
49
 
 
50
 
    if not os.path.exists(log_folder):
51
 
        os.mkdir(log_folder)
52
 
 
53
 
    f = logging.Formatter('%(levelname)-.3s [%(asctime)s.%(msecs)03d] %(name)s: %(message)s',
54
 
                          '%Y%m%d-%H:%M:%S')
55
 
    debug_log = make_handler(config, os.path.join(log_folder, 'debug.log'))
56
 
    debug_log.setLevel(logging.DEBUG)
57
 
    debug_log.setFormatter(f)
58
 
    if foreground:
59
 
        stdout_log = logging.StreamHandler(sys.stdout)
60
 
        stdout_log.setLevel(logging.DEBUG)
61
 
        stdout_log.setFormatter(f)
62
 
    f = logging.Formatter('[%(asctime)s.%(msecs)03d] %(message)s',
63
 
                          '%Y%m%d-%H:%M:%S')
64
 
    access_log = make_handler(config, os.path.join(log_folder, 'access.log'))
65
 
    access_log.setLevel(logging.INFO)
66
 
    access_log.setFormatter(f)
67
 
 
68
 
    logging.getLogger('').setLevel(logging.DEBUG)
69
 
    logging.getLogger('').addHandler(debug_log)
70
 
    logging.getLogger('wsgi').addHandler(access_log)
71
 
 
72
 
    if foreground:
73
 
        logging.getLogger('').addHandler(stdout_log)
74
 
 
 
38
from loggerhead.trace import make_handler, setup_logging
 
39
from loggerhead.apps.error import ErrorHandlerApp
75
40
 
76
41
 
77
42
def main():
 
43
    sys.stderr.write('\n\n')
 
44
    sys.stderr.write('WARNING!!! This script has been deprecated by '
 
45
                     'serve-branches, and will be removed in the next '
 
46
                     'release. Please migrate to serve-branches and report '
 
47
                     'any missing features.\n')
 
48
    sys.stderr.write('\n\n')
 
49
 
78
50
    home = os.path.realpath(os.path.dirname(__file__))
79
51
    default_pidfile = os.path.join(home, 'loggerhead.pid')
80
52
    default_configfile = os.path.join(home, 'loggerhead.conf')
81
53
    default_log_folder = os.path.join(home, 'logs')
82
 
    parser = OptionParser(usage='usage: %prog [options]', version='%prog ' + release.version)
83
 
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
 
54
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
 
55
    parser.add_option('-f', '--foreground',
 
56
                      action='store_true', dest='foreground', default=False,
84
57
                      help="run in the foreground; don't daemonize")
85
 
    parser.add_option('-C', '--check', action='store_true', dest='check', default=False,
86
 
                      help="only start if not already running (useful for cron jobs)")
87
 
    parser.add_option('-p', '--pidfile', dest="pidfile", default=default_pidfile,
88
 
                      help="override pidfile location")
89
 
    parser.add_option('-c', '--config-file', dest="configfile", default=default_configfile,
90
 
                      help="override configuration file location")
91
 
    parser.add_option('-L', '--log-folder', dest="log-folder", default=default_log_folder,
92
 
                      help="override log file directory")
 
58
    parser.add_option('-C', '--check', action='store_true',
 
59
                      dest='check', default=False,
 
60
                      help=("only start if not already running (useful for "
 
61
                            "cron jobs)"))
 
62
    parser.add_option('-p', '--pidfile', dest="pidfile",
 
63
                      default=default_pidfile,
 
64
                      type=str, help="override pidfile location")
 
65
    parser.add_option('-c', '--config-file', dest="configfile",
 
66
                      default=default_configfile,
 
67
                      type=str, help="override configuration file location")
 
68
    parser.add_option('-L', '--log-folder', dest="log_folder",
 
69
                      default=default_log_folder,
 
70
                      type=str, help="override log file directory")
93
71
    options, args = parser.parse_args()
94
72
    if len(args) > 0:
95
73
        parser.error('No filename arguments are used, only options.')
97
75
    if options.check:
98
76
        if daemon.is_running(options.pidfile):
99
77
            sys.exit(0)
100
 
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (options.pidfile,))
 
78
        sys.stderr.write('Did not find loggerhead running in %r;' % (
 
79
                         options.pidfile))
 
80
        sys.stderr.write(' restarting...\n')
101
81
 
102
82
    # read loggerhead config
103
83
 
106
86
    if extra_path:
107
87
        sys.path.insert(0, extra_path)
108
88
 
109
 
    #turbogears.update_config(configfile="dev.cfg", modulename="loggerhead.config")
110
 
 
111
 
    potential_overrides = [ ('server.socket_port', int),
112
 
                            ('server.webpath', str),
113
 
                            ('server.thread_pool', int),
114
 
                            ('server.socket_host' ,str) ]
 
89
    potential_overrides = [('server.socket_port', int),
 
90
                           ('server.webpath', str),
 
91
                           ('server.thread_pool', int),
 
92
                           ('server.socket_host', str)]
115
93
    server_port = int(config.get('server.socket_port', 8080))
116
94
    nworkers = int(config.get('server.thread_pool', 10))
117
95
    server_host = config.get('server.socket_host', '0.0.0.0')
121
99
        value = config.get(key, None)
122
100
        if value is not None:
123
101
            value = keytype(value)
124
 
            #turbogears.config.update({ key: value })
125
102
 
126
103
    if not options.foreground:
127
104
        sys.stderr.write('\n')
128
105
        sys.stderr.write('Launching loggerhead into the background.\n')
129
 
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
 
106
        sys.stderr.write('PID file: %s\n' % options.pidfile)
130
107
        sys.stderr.write('\n')
131
108
 
132
109
        daemon.daemonize(options.pidfile, home)
140
117
 
141
118
    app = app
142
119
    app = make_middleware(app)
143
 
    app = make_filter(app, None)
 
120
    app = make_filter(app, None, logger_name=log.name+'.access')
 
121
    app = ErrorHandlerApp(app)
144
122
 
145
123
    if webpath:
146
124
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
 
125
 
147
126
        def app(environ, start_response, orig=app):
148
127
            environ['SCRIPT_NAME'] = path
149
128
            environ['HTTP_HOST'] = netloc
 
129
            environ['wsgi.url_scheme'] = scheme
150
130
            return orig(environ, start_response)
151
131
 
 
132
    load_plugins()
 
133
 
152
134
    try:
153
135
        httpserver.serve(
154
136
            app, host=server_host, port=server_port,