簡體   English   中英

如何使用 python 的 fileConfig 進行日志記錄並配置日志文件文件名

[英]How to use logging with python's fileConfig and configure the logfile filename

我有一個用於記錄到控制台的日志記錄配置文件和一個具有不同格式和級別的文件。 在我的 python 腳本中,我可以加載此配置,基本上控制台和文件 output 都可以。

我在配置文件中設置了文件名,如下所示。

是否可以在 python 腳本本身中設置該文件名?

python 代碼:

# set up logging
logging.config.fileConfig(loginipath)
logger = logging.getLogger('sLogger')

# log something
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

日志記錄配置文件:

[loggers]
keys=root,sLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fileFormatter,consoleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('logfile.log',)

[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[formatter_consoleFormatter]
format=%(levelname)s - %(message)s
datefmt=

我有一個用於登錄到控制台的日志配置文件和一個具有不同格式和級別的文件。 在我的 python 腳本中,我可以加載這個配置,基本上控制台和文件輸出都可以。

我在配置文件中設置文件名,如下所示。

是否可以在 python 腳本本身中設置該文件名?

蟒蛇代碼:

# set up logging
logging.config.fileConfig(loginipath)
logger = logging.getLogger('sLogger')

# log something
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

日志配置文件:

[loggers]
keys=root,sLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fileFormatter,consoleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('logfile.log',)

[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[formatter_consoleFormatter]
format=%(levelname)s - %(message)s
datefmt=

我有一個用於登錄到控制台的日志配置文件和一個具有不同格式和級別的文件。 在我的 python 腳本中,我可以加載這個配置,基本上控制台和文件輸出都可以。

我在配置文件中設置文件名,如下所示。

是否可以在 python 腳本本身中設置該文件名?

蟒蛇代碼:

# set up logging
logging.config.fileConfig(loginipath)
logger = logging.getLogger('sLogger')

# log something
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

日志配置文件:

[loggers]
keys=root,sLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fileFormatter,consoleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('logfile.log',)

[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[formatter_consoleFormatter]
format=%(levelname)s - %(message)s
datefmt=

我有一個用於登錄到控制台的日志配置文件和一個具有不同格式和級別的文件。 在我的 python 腳本中,我可以加載這個配置,基本上控制台和文件輸出都可以。

我在配置文件中設置文件名,如下所示。

是否可以在 python 腳本本身中設置該文件名?

蟒蛇代碼:

# set up logging
logging.config.fileConfig(loginipath)
logger = logging.getLogger('sLogger')

# log something
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

日志配置文件:

[loggers]
keys=root,sLogger

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=fileFormatter,consoleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sLogger]
level=DEBUG
handlers=consoleHandler,fileHandler
qualname=sLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=WARNING
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('logfile.log',)

[formatter_fileFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[formatter_consoleFormatter]
format=%(levelname)s - %(message)s
datefmt=

對於那些只想指定目錄而不是文件名的人,請記住,您可以在配置文件中使用 python 表達式。 所以配置文件應該是這樣的:

[handler_myhandler2]
class=FileHandler
level=DEBUG
formatter=form01
args=(os.path.join('%(logdirpath)s', 'yourfilename.log'),'w')

你的來電者應該是這樣的:

logging.config.fileConfig(loginipath, defaults={'logdirpath': '/var/log'})

請注意,ConfigParser 期望文件路徑使用單個正斜杠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM