如何将默认的 sanic 日志目录更改为自定义目录?
How to change the default sanic log directory to a custom directory?
Sanic目前支持Linux日志目录为/dev/log,如果该目录不存在,日志将无法运行。如何将目录更改为自定义目录?
Sanic uses the regular standard library logging
实用程序。
根据文档:
To use your own logging config, simply use logging.config.dictConfig
, or pass log_config
when you initialize Sanic
app.
app = Sanic('test', log_config=LOGGING_CONFIG)
# or
logging.config.dictConfig(LOGGING_CONFIG)
Here is a good resource on logging in Python.
您要查找的是 filename
关键字。
LOGGING_CONFIG = {
...
'filename': '/path/to/my/log'
...
}
在阅读文档并尝试各种组合后,我发现以下解决方案有效,使用以下字典并更改文件路径的值是必要的。
from sanic.log import DefaultFilter
import sys
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'accessFilter': {
'()': DefaultFilter,
'param': [0, 10, 20]
},
'errorFilter': {
'()': DefaultFilter,
'param': [30, 40, 50]
}
},
'formatters': {
'simple': {
'format': '%(asctime)s - (%(name)s)[%(levelname)s]: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S'
},
'access': {
'format': '%(asctime)s - (%(name)s)[%(levelname)s][%(host)s]: ' +
'%(request)s %(message)s %(status)d %(byte)d',
'datefmt': '%Y-%m-%d %H:%M:%S'
}
},
'handlers': {
'internalFile': {
'class': 'logging.FileHandler',
'filters': ['accessFilter'],
'formatter': 'simple',
'filename': "temp/clickinternal.log"
},
'accessFile': {
'class': 'logging.FileHandler',
'filters': ['accessFilter'],
'formatter': 'access',
'filename': "temp/clickaccess.log"
},
'errorFile': {
'class': 'logging.FileHandler',
'filters': ['errorFilter'],
'formatter': 'simple',
'filename': "temp/clickerr.log"
},
'internal': {
'class': 'logging.StreamHandler',
'filters': ['accessFilter'],
'formatter': 'simple',
'stream': sys.stderr
},
'accessStream': {
'class': 'logging.StreamHandler',
'filters': ['accessFilter'],
'formatter': 'access',
'stream': sys.stderr
},
'errorStream': {
'class': 'logging.StreamHandler',
'filters': ['errorFilter'],
'formatter': 'simple',
'stream': sys.stderr
}
},
'loggers': {
'sanic': {
'level': 'DEBUG',
'handlers': ['internal','errorStream','internalFile', 'errorFile']
},
'network': {
'level': 'DEBUG',
'handlers': ['accessStream','errorStream','accessFile', 'errorFile']
}
}
}
app.run(debug=True,log_config=LOGGING, host='0.0.0.0', port='8001')
Sanic目前支持Linux日志目录为/dev/log,如果该目录不存在,日志将无法运行。如何将目录更改为自定义目录?
Sanic uses the regular standard library logging
实用程序。
根据文档:
To use your own logging config, simply use
logging.config.dictConfig
, or passlog_config
when you initializeSanic
app.
app = Sanic('test', log_config=LOGGING_CONFIG)
# or
logging.config.dictConfig(LOGGING_CONFIG)
Here is a good resource on logging in Python.
您要查找的是 filename
关键字。
LOGGING_CONFIG = {
...
'filename': '/path/to/my/log'
...
}
在阅读文档并尝试各种组合后,我发现以下解决方案有效,使用以下字典并更改文件路径的值是必要的。
from sanic.log import DefaultFilter
import sys
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'accessFilter': {
'()': DefaultFilter,
'param': [0, 10, 20]
},
'errorFilter': {
'()': DefaultFilter,
'param': [30, 40, 50]
}
},
'formatters': {
'simple': {
'format': '%(asctime)s - (%(name)s)[%(levelname)s]: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S'
},
'access': {
'format': '%(asctime)s - (%(name)s)[%(levelname)s][%(host)s]: ' +
'%(request)s %(message)s %(status)d %(byte)d',
'datefmt': '%Y-%m-%d %H:%M:%S'
}
},
'handlers': {
'internalFile': {
'class': 'logging.FileHandler',
'filters': ['accessFilter'],
'formatter': 'simple',
'filename': "temp/clickinternal.log"
},
'accessFile': {
'class': 'logging.FileHandler',
'filters': ['accessFilter'],
'formatter': 'access',
'filename': "temp/clickaccess.log"
},
'errorFile': {
'class': 'logging.FileHandler',
'filters': ['errorFilter'],
'formatter': 'simple',
'filename': "temp/clickerr.log"
},
'internal': {
'class': 'logging.StreamHandler',
'filters': ['accessFilter'],
'formatter': 'simple',
'stream': sys.stderr
},
'accessStream': {
'class': 'logging.StreamHandler',
'filters': ['accessFilter'],
'formatter': 'access',
'stream': sys.stderr
},
'errorStream': {
'class': 'logging.StreamHandler',
'filters': ['errorFilter'],
'formatter': 'simple',
'stream': sys.stderr
}
},
'loggers': {
'sanic': {
'level': 'DEBUG',
'handlers': ['internal','errorStream','internalFile', 'errorFile']
},
'network': {
'level': 'DEBUG',
'handlers': ['accessStream','errorStream','accessFile', 'errorFile']
}
}
}
app.run(debug=True,log_config=LOGGING, host='0.0.0.0', port='8001')