42
42
# Clients may use this as a sensible default port to connect to.
43
43
DEFAULT_PORT = 9999
44
44
45
- _DEFAULT_LOG_CONFIG = {
46
- 'version' : 1 ,
47
- 'handlers' : {
48
- 'default' : {
49
- 'class' : 'logging.StreamHandler' ,
50
- 'formatter' : 'precise' ,
51
- 'level' : 'INFO' ,
52
- 'stream' : 'ext://sys.stdout'
45
+ _DEFAULT_LOG_CONFIG_JSON = """
46
+ {
47
+ "version": 1,
48
+ "handlers": {
49
+ "default": {
50
+ "class": "logging.StreamHandler",
51
+ "formatter": "precise",
52
+ "level": "INFO",
53
+ "stream": "ext://sys.stdout"
53
54
}
54
55
},
55
- ' formatters' : {
56
- ' precise' : {
57
- ' format' : ' %(asctime)s %(levelname)-8s %( name)-15s %(message)s' ,
58
- ' datefmt' : ' %Y-%m-%d %H:%M:%S'
56
+ " formatters" : {
57
+ " precise" : {
58
+ " format": " %(asctime)s %(levelname)-8s (%(process)-5d) %( name)-15s %(message)s" ,
59
+ " datefmt": " %Y-%m-%d %H:%M:%S"
59
60
}
60
61
},
61
- ' loggers' : {
62
- ' gunicorn.error' : {
63
- ' handlers' : [' default' ],
64
- ' level' : ' INFO' ,
65
- ' propagate' : False
62
+ " loggers" : {
63
+ " gunicorn.error" : {
64
+ " handlers" : [" default" ],
65
+ " level": " INFO" ,
66
+ " propagate": false
66
67
},
67
- ' gunicorn.access' : {
68
- ' handlers' : [' default' ],
69
- ' level' : ' INFO' ,
70
- ' propagate' : False
68
+ " gunicorn.access" : {
69
+ " handlers" : [" default" ],
70
+ " level": " INFO" ,
71
+ " propagate": false
71
72
},
72
- '' : {
73
- ' handlers' : [' default' ],
74
- ' level' : ' INFO'
73
+ "" : {
74
+ " handlers" : [" default" ],
75
+ " level": " INFO"
75
76
}
76
77
}
77
78
}
78
-
79
+ """
79
80
80
81
def strip_margin (text ):
81
82
return re .sub ('\n [ \t ]*\|' , '\n ' , text )
@@ -93,9 +94,12 @@ def main(args=None):
93
94
help = "Specify Filetracker dir (taken from FILETRACKER_DIR "
94
95
"environment variable if not present)" )
95
96
parser .add_option ('-L' , '--log' , dest = 'log' , default = None ,
96
- help = "Log file location (stderr by default)" )
97
+ help = "Log file location (default: stdout)" )
98
+ parser .add_option ('--log-level' , dest = 'log_level' , default = 'INFO' ,
99
+ help = "Log level (default: INFO)" )
97
100
parser .add_option ('--log-config' , dest = 'log_config' , default = None ,
98
- help = "Logging configuration (in JSON). Takes precedence over -L" )
101
+ help = "Logging configuration (in JSON). "
102
+ "Takes precedence over other logging flags" )
99
103
parser .add_option ('-D' , '--no-daemon' , dest = 'daemonize' ,
100
104
action = 'store_false' , default = True ,
101
105
help = "Do not daemonize, stay in foreground" )
@@ -117,15 +121,19 @@ def main(args=None):
117
121
with open (options .log_config ) as f :
118
122
log_config = json .load (f )
119
123
else :
120
- log_config = _DEFAULT_LOG_CONFIG
124
+ log_config = json . loads ( _DEFAULT_LOG_CONFIG_JSON )
121
125
if options .log :
122
126
log_config ['handlers' ]['default' ] = {
123
- 'class' : 'logging.handlers.RotatingFileHandler ' ,
127
+ 'class' : 'logging.FileHandler ' ,
124
128
'formatter' : 'precise' ,
125
129
'filename' : options .log ,
126
- 'maxBytes' : 1024 * 1024 ,
127
- 'backupCount' : 3
130
+ 'level' : 'INFO' ,
128
131
}
132
+ if options .log_level :
133
+ log_config ['handlers' ]['default' ]['level' ] = options .log_level
134
+ log_config ['loggers' ]['gunicorn.error' ]['level' ] = options .log_level
135
+ log_config ['loggers' ]['gunicorn.access' ]['level' ] = options .log_level
136
+ log_config ['loggers' ]['' ]['level' ] = options .log_level
129
137
130
138
logging .config .dictConfig (log_config )
131
139
0 commit comments