~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to start-loggerhead

  • Committer: Jelmer Vernooij
  • Date: 2008-08-06 18:33:20 UTC
  • mto: (197.1.9 pathargs)
  • mto: This revision was merged to the branch mainline in revision 202.
  • Revision ID: jelmer@samba.org-20080806183320-6llann0k480dlb9y
add --log-folder option.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
import sys
24
24
import urlparse
25
25
 
26
 
from bzrlib.util.configobj.configobj import ConfigObj
 
26
from 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
 
32
from loggerhead import daemon, release
33
33
from loggerhead.apps.config import Root
34
 
from loggerhead.trace import make_handler, setup_logging
35
 
from loggerhead.apps.error import ErrorHandlerApp
 
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
 
36
75
 
37
76
 
38
77
def main():
40
79
    default_pidfile = os.path.join(home, 'loggerhead.pid')
41
80
    default_configfile = os.path.join(home, 'loggerhead.conf')
42
81
    default_log_folder = os.path.join(home, 'logs')
43
 
    parser = OptionParser(usage='usage: %prog [options]', version='%prog')
44
 
    parser.add_option('-f', '--foreground',
45
 
                      action='store_true', dest='foreground', default=False,
 
82
    parser = OptionParser(usage='usage: %prog [options]', version='%prog ' + release.version)
 
83
    parser.add_option('-f', '--foreground', action='store_true', dest='foreground', default=False,
46
84
                      help="run in the foreground; don't daemonize")
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")
 
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")
60
93
    options, args = parser.parse_args()
61
94
    if len(args) > 0:
62
95
        parser.error('No filename arguments are used, only options.')
64
97
    if options.check:
65
98
        if daemon.is_running(options.pidfile):
66
99
            sys.exit(0)
67
 
        sys.stderr.write('Did not find loggerhead running in %r;' % (
68
 
                         options.pidfile))
69
 
        sys.stderr.write(' restarting...\n')
 
100
        sys.stderr.write('Did not find loggerhead running in %r; restarting...\n' % (options.pidfile,))
70
101
 
71
102
    # read loggerhead config
72
103
 
75
106
    if extra_path:
76
107
        sys.path.insert(0, extra_path)
77
108
 
78
 
    potential_overrides = [('server.socket_port', int),
79
 
                           ('server.webpath', str),
80
 
                           ('server.thread_pool', int),
81
 
                           ('server.socket_host', str)]
 
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) ]
82
115
    server_port = int(config.get('server.socket_port', 8080))
83
116
    nworkers = int(config.get('server.thread_pool', 10))
84
117
    server_host = config.get('server.socket_host', '0.0.0.0')
88
121
        value = config.get(key, None)
89
122
        if value is not None:
90
123
            value = keytype(value)
 
124
            #turbogears.config.update({ key: value })
91
125
 
92
126
    if not options.foreground:
93
127
        sys.stderr.write('\n')
94
128
        sys.stderr.write('Launching loggerhead into the background.\n')
95
 
        sys.stderr.write('PID file: %s\n' % options.pidfile)
 
129
        sys.stderr.write('PID file: %s\n' % (options.pidfile,))
96
130
        sys.stderr.write('\n')
97
131
 
98
132
        daemon.daemonize(options.pidfile, home)
106
140
 
107
141
    app = app
108
142
    app = make_middleware(app)
109
 
    app = make_filter(app, None, logger_name=log.name+'.access')
110
 
    app = ErrorHandlerApp(app)
 
143
    app = make_filter(app, None)
111
144
 
112
145
    if webpath:
113
146
        scheme, netloc, path, blah, blah, blah = urlparse.urlparse(webpath)
114
 
 
115
147
        def app(environ, start_response, orig=app):
116
148
            environ['SCRIPT_NAME'] = path
117
149
            environ['HTTP_HOST'] = netloc