~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

  • Committer: Martin Albisetti
  • Date: 2008-12-22 19:33:12 UTC
  • Revision ID: argentina@gmail.com-20081222193312-b5ql8ksk75rqgxbb
Updated NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
import sys
24
24
import urlparse
25
25
 
26
 
from configobj import ConfigObj
 
26
from bzrlib.util.configobj.configobj import ConfigObj
27
27
 
28
28
from paste import httpserver
29
29
from paste.httpexceptions import make_middleware
30
30
from paste.translogger import make_filter
31
31
 
32
 
from loggerhead import daemon, release
 
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', 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
 
 
 
34
from loggerhead.trace import make_handler, setup_logging
 
35
from loggerhead.apps.error import ErrorHandlerApp
75
36
 
76
37
 
77
38
def main():
79
40
    default_pidfile = os.path.join(home, 'loggerhead.pid')
80
41
    default_configfile = os.path.join(home, 'loggerhead.conf')
81
42
    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,
 
43
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
 
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,
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")
 
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,
 
53
                      type=str, help="override pidfile location")
 
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,
 
59
                      type=str, help="override log file directory")
93
60
    options, args = parser.parse_args()
94
61
    if len(args) > 0:
95
62
        parser.error('No filename arguments are used, only options.')
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
 
    #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) ]
 
78
    potential_overrides = [('server.socket_port', int),
 
79
                           ('server.webpath', str),
 
80
                           ('server.thread_pool', int),
 
81
                           ('server.socket_host', str)]
115
82
    server_port = int(config.get('server.socket_port', 8080))
116
83
    nworkers = int(config.get('server.thread_pool', 10))
117
84
    server_host = config.get('server.socket_host', '0.0.0.0')
121
88
        value = config.get(key, None)
122
89
        if value is not None:
123
90
            value = keytype(value)
124
 
            #turbogears.config.update({ key: value })
125
91
 
126
92
    if not options.foreground:
127
93
        sys.stderr.write('\n')
128
94
        sys.stderr.write('Launching loggerhead into the background.\n')
129
 
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
 
95
        sys.stderr.write('PID file: %s\n' % options.pidfile)
130
96
        sys.stderr.write('\n')
131
97
 
132
98
        daemon.daemonize(options.pidfile, home)
140
106
 
141
107
    app = app
142
108
    app = make_middleware(app)
143
 
    app = make_filter(app, None)
 
109
    app = make_filter(app, None, logger_name=log.name+'.access')
 
110
    app = ErrorHandlerApp(app)
144
111
 
145
112
    if webpath:
146
113
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
 
114
 
147
115
        def app(environ, start_response, orig=app):
148
116
            environ['SCRIPT_NAME'] = path
149
117
            environ['HTTP_HOST'] = netloc