私のPythonプログラムには、次のコードがあります。
def main():
# The file's path
path = os.path.dirname(os.path.realpath(__file__))
...
# Config file relative to this file
loggingConf = open('{0}/configs/logging.yml'.format(path), 'r')
logging.config.dictConfig(yaml.load(loggingConf))
loggingConf.close()
logger = logging.getLogger(LOGGER)
...
これは私の logging.yml 構成ファイルです。
version: 1
formatters:
default:
format: '%(asctime)s %(levelname)s %(name)s %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: default
stream: ext://sys.stdout
file:
class : logging.FileHandler
formatter: default
filename: bot.log
loggers:
cloaked_chatter:
level: DEBUG
handlers: [console, file]
propagate: no
問題は、プログラムが起動された場所に bot.log ファイルが作成されることです。常にプロジェクトのフォルダー、つまり Python プログラムと同じフォルダーに作成する必要があります。
たとえば、でプログラムを起動すると./bot.py
、同じフォルダーにログ ファイルが作成されます。しかし、それを起動するとpython3 path/bot.py
、ファイル階層の Python プログラムより上のレベルにログ ファイルが作成されます。
これを解決するには、設定ファイルにファイル名をどのように記述すればよいですか? または、カスタム ハンドラーを作成する必要がありますか? もしそうなら、どのように?それとも、これは dictConfig を使用して解決することはできませんか?