pnv*_*pnv 5 python logging docker docker-compose
我正在为开发环境使用 docker compose。我的 docker compose 文件是,
version: '2'
services:
mysql_db:
image: mysql:5.6
ports:
- "3310:3306"
environment:
MYSQL_ROOT_PASSWORD: some pass
MYSQL_DATABASE: some db
MYSQL_USER: some user
MYSQL_PASSWORD: some pass
onehop:
build:
context: . #current dir as build context
args:
mysql_host: 127.0.0.1
mysql_port: 3306
mysql_user: onehop
mysql_passwd: onehop
mysql_db: onehop
celery_host: some host
celery_port: some port
celery_user: some user
celery_password: some password
app_env: SomeDev
volumes:
- ../../.:/code
working_dir: /code/
environment:
ONEHOP_ENV: PranavDev6530
PYTHONUNBUFFERED: 0
command: bash -c "pip install --upgrade pip && pip install -r requirements.txt && python manage.py runserver updatedb"
ports:
- "5000:5000"
depends_on:
- mysql_db
Run Code Online (Sandbox Code Playgroud)
我使用了一个查找日志配置的函数,如果已经配置,则提供日志实例,如下所示,
def get_logger(logger_name=None):
global __logging_configured
if not __logging_configured:
logging.config.dictConfig(CONFIG.LOGGING_CONFIG)
__logging_configured = True
logger = logging.getLogger(logger_name or CONFIG.DEFAULT_LOGGER_NAME)
return logger
Run Code Online (Sandbox Code Playgroud)
我打电话get_logger('logger name')去拿记录器。
CONFIG.LOGGING_CONFIG 是一个字典如下,
LOGGING_CONFIG = dict(
version=1,
formatters={
'compact': {
'format': '%(asctime)s [%(levelname)-8.8s] %(name)-10.10s : %(message)s'
},
'verbose': {
'format': '%(asctime)s [%(levelname)-8.8s] %(name)-8.8s [%(filename)-15.15s:%(lineno)-3.3s]: %(message)s'
},
'err_report': {
'format': '%(asctime)s\n%(message)s'
}
},
handlers={
'slack_jabber': {
'class': 'contrib.slacker.SlackHandler',
'url': 'https://hooks.slack.com/services/lol',
'channel': 'somedev',
'username': 'crash_jabber',
'icon_emoji': ':ghost:'
},
'cron': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'formatter': 'verbose',
'level': 'DEBUG',
'filename': '%s/%s' % (pwd, '../logs/cron/cron.log'),
'interval': 1,
'when': 'midnight',
'encoding': 'utf8'
},
'api': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'formatter': 'verbose',
'level': 'DEBUG',
'filename': '%s/%s' % (pwd, '../logs/api/api.log'),
'interval': 1,
'when': 'midnight',
'encoding': 'utf8'
},
'critical_err': {
'class': 'logging.handlers.SMTPHandler',
'formatter': 'err_report',
'mailhost': ("localhost", 25),
'fromaddr': 'no-reply@company.co',
'toaddrs': [
'lol@lol.com'
],
'subject': '[Dev] Onehop : Something bad happened'
},
'default': {
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
},
loggers={
'': {
'handlers': ['default'],
'level': 'DEBUG'
},
'cron': {
'handlers': ['cron'],
'level': 'DEBUG',
'propagate': False
},
'api': {
'handlers': ['api', 'default'],
'level': 'DEBUG',
'propagate': False
},
'crash': {
'handlers': ['critical_err', 'api', 'slack_jabber'],
'level': 'ERROR',
'propagate': False
}
}
)
Run Code Online (Sandbox Code Playgroud)
当前设置在我的 ubuntu 机器上完美运行,但不知何故,一旦我docker-compose up使用sudo. 我对 docker-compose 很陌生,我是否缺少一些设置docker-compose.yaml?谢谢。