~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

  • Committer: Matt Nordhoff
  • Date: 2009-04-30 10:39:05 UTC
  • mto: This revision was merged to the branch mainline in revision 406.
  • Revision ID: mnordhoff@mattnordhoff.com-20090430103905-10si14h2i325htrj
Strip trailing whitespace

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
 
19
19
import logging
20
 
import logging.handlers
21
20
from optparse import OptionParser
22
21
import os
23
22
import sys
24
23
import urlparse
25
24
 
26
 
from configobj import ConfigObj
 
25
from bzrlib.plugin import load_plugins
 
26
from bzrlib.util.configobj.configobj import ConfigObj
27
27
 
28
28
from paste import httpserver
29
29
from paste.httpexceptions import make_middleware
31
31
 
32
32
from loggerhead import daemon
33
33
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', 1, 100)
40
 
    elif roll == 'weekly':
41
 
        h = logging.handlers.TimedRotatingFileHandler(filename, 'W0', 1, 100)
42
 
    else:
43
 
        h = logging.FileHandler(filename)
44
 
    return h
45
 
 
46
 
 
47
 
def setup_logging(log_folder, 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
 
 
 
34
from loggerhead.trace import setup_logging
 
35
from loggerhead.apps.error import ErrorHandlerApp
75
36
 
76
37
 
77
38
def main():
80
41
    default_configfile = os.path.join(home, 'loggerhead.conf')
81
42
    default_log_folder = os.path.join(home, 'logs')
82
43
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
83
 
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
 
44
    parser.add_option('-f', '--foreground',
 
45
                      action='store_true', dest='foreground', default=False,
84
46
                      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,
 
47
    parser.add_option('-C', '--check', action='store_true',
 
48
                      dest='check', default=False,
 
49
                      help=("only start if not already running (useful for "
 
50
                            "cron jobs)"))
 
51
    parser.add_option('-p', '--pidfile', dest="pidfile",
 
52
                      default=default_pidfile,
88
53
                      type=str, help="override pidfile location")
89
 
    parser.add_option('-c', '--config-file', dest="configfile", default=default_configfile,
90
 
                                          type=str, help="override configuration file location")
91
 
    parser.add_option('-L', '--log-folder', dest="log_folder", default=default_log_folder,
 
54
    parser.add_option('-c', '--config-file', dest="configfile",
 
55
                      default=default_configfile,
 
56
                      type=str, help="override configuration file location")
 
57
    parser.add_option('-L', '--log-folder', dest="log_folder",
 
58
                      default=default_log_folder,
92
59
                      type=str, help="override log file directory")
93
60
    options, args = parser.parse_args()
94
61
    if len(args) > 0:
97
64
    if options.check:
98
65
        if daemon.is_running(options.pidfile):
99
66
            sys.exit(0)
100
 
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (options.pidfile,))
 
67
        sys.stderr.write('Did not find loggerhead running in %r;' % (
 
68
                         options.pidfile))
 
69
        sys.stderr.write(' restarting...\n')
101
70
 
102
71
    # read loggerhead config
103
72
 
106
75
    if extra_path:
107
76
        sys.path.insert(0, extra_path)
108
77
 
109
 
    potential_overrides = [ ('server.socket_port', int),
110
 
                            ('server.webpath', str),
111
 
                            ('server.thread_pool', int),
112
 
                            ('server.socket_host' ,str) ]
 
78
    potential_overrides = [('server.socket_port', int),
 
79
                           ('server.webpath', str),
 
80
                           ('server.thread_pool', int),
 
81
                           ('server.socket_host', str)]
113
82
    server_port = int(config.get('server.socket_port', 8080))
114
83
    nworkers = int(config.get('server.thread_pool', 10))
115
84
    server_host = config.get('server.socket_host', '0.0.0.0')
123
92
    if not options.foreground:
124
93
        sys.stderr.write('\n')
125
94
        sys.stderr.write('Launching loggerhead into the background.\n')
126
 
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
 
95
        sys.stderr.write('PID file: %s\n' % options.pidfile)
127
96
        sys.stderr.write('\n')
128
97
 
129
98
        daemon.daemonize(options.pidfile, home)
137
106
 
138
107
    app = app
139
108
    app = make_middleware(app)
140
 
    app = make_filter(app, None)
 
109
    app = make_filter(app, None, logger_name=log.name+'.access')
 
110
    app = ErrorHandlerApp(app)
141
111
 
142
112
    if webpath:
143
113
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
 
114
 
144
115
        def app(environ, start_response, orig=app):
145
116
            environ['SCRIPT_NAME'] = path
146
117
            environ['HTTP_HOST'] = netloc
 
118
            environ['wsgi.url_scheme'] = scheme
147
119
            return orig(environ, start_response)
148
120
 
 
121
    load_plugins()
 
122
 
149
123
    try:
150
124
        httpserver.serve(
151
125
            app, host=server_host, port=server_port,