Используя класс Python logging для записи в файл?
Как я могу использовать класс logging в python для записи в файл? Каждый раз, когда я пытаюсь использовать его, он просто печатает сообщение.
6 ответов:
пример использования
logging.basicConfig
, а неlogging.fileHandler()
logging.basicConfig(filename=logname, filemode='a', format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s', datefmt='%H:%M:%S', level=logging.DEBUG) logging.info("Running Urban Planning") self.logger = logging.getLogger('urbanGUI')
в порядке, пять частей делают следующее:
- установите выходной файл (
filename=logname
)- установите его для добавления, а не перезаписи (
filemode='a'
)- определите формат выходного сообщения (
format=...
)- определите формат выходного времени (
datefmt='%H:%M:%S'
)- и определить минимальный уровень сообщения он будет принимать (
level=logging.DEBUG
).
принято от " ведение журнала поваренная книга":
# create logger with 'spam_application' logger = logging.getLogger('spam_application') logger.setLevel(logging.DEBUG) # create file handler which logs even debug messages fh = logging.FileHandler('spam.log') fh.setLevel(logging.DEBUG) logger.addHandler(fh)
и вы хорошо идти.
P. S. убедитесь, чтобы прочитать ведение журнала HOWTO как хорошо.
http://docs.python.org/library/logging.html#logging.basicConfig
logging.basicConfig(filename='/path/to/your/log', level=....)
Я предпочитаю использовать файл конфигурации. Это позволяет мне переключать уровни ведения журнала, местоположения и т. д. без изменения кода, когда я перехожу от разработки к выпуску. Я просто упаковываю другой конфигурационный файл с тем же именем и с теми же определенными регистраторами.
import logging.config if __name__ == '__main__': # Configure the logger # loggerConfigFileName: The name and path of your configuration file logging.config.fileConfig(path.normpath(loggerConfigFileName)) # Create the logger # Admin_Client: The name of a logger defined in the config file mylogger = logging.getLogger('Admin_Client') msg='Bite Me' myLogger.debug(msg) myLogger.info(msg) myLogger.warn(msg) myLogger.error(msg) myLogger.critical(msg) # Shut down the logger logging.shutdown()
вот мой код для файла конфигурации журнала
#These are the loggers that are available from the code #Each logger requires a handler, but can have more than one [loggers] keys=root,Admin_Client #Each handler requires a single formatter [handlers] keys=fileHandler, consoleHandler [formatters] keys=logFormatter, consoleFormatter [logger_root] level=DEBUG handlers=fileHandler [logger_Admin_Client] level=DEBUG handlers=fileHandler, consoleHandler qualname=Admin_Client #propagate=0 Does not pass messages to ancestor loggers(root) propagate=0 # Do not use a console logger when running scripts from a bat file without a console # because it hangs! [handler_consoleHandler] class=StreamHandler level=DEBUG formatter=consoleFormatter args=(sys.stdout,)# The comma is correct, because the parser is looking for args [handler_fileHandler] class=FileHandler level=DEBUG formatter=logFormatter # This causes a new file to be created for each script # Change time.strftime("%Y%m%d%H%M%S") to time.strftime("%Y%m%d") # And only one log per day will be created. All messages will be amended to it. args=("D:\Logs\PyLogs\" + time.strftime("%Y%m%d%H%M%S")+'.log', 'a') [formatter_logFormatter] #name is the name of the logger root or Admin_Client #levelname is the log message level debug, warn, ect #lineno is the line number from where the call to log is made #04d is simple formatting to ensure there are four numeric places with leading zeros #4s would work as well, but would simply pad the string with leading spaces, right justify #-4s would work as well, but would simply pad the string with trailing spaces, left justify #filename is the file name from where the call to log is made #funcName is the method name from where the call to log is made #format=%(asctime)s | %(lineno)d | %(message)s #format=%(asctime)s | %(name)s | %(levelname)s | %(message)s #format=%(asctime)s | %(name)s | %(module)s-%(lineno) | %(levelname)s | %(message)s #format=%(asctime)s | %(name)s | %(module)s-%(lineno)04d | %(levelname)s | %(message)s #format=%(asctime)s | %(name)s | %(module)s-%(lineno)4s | %(levelname)-8s | %(message)s format=%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s #Use a separate formatter for the console if you want [formatter_consoleFormatter] format=%(asctime)s | %(levelname)-8s | %(filename)s-%(funcName)s-%(lineno)04d | %(message)s
http://docs.python.org/library/logging.handlers.html#filehandler
The
FileHandler
класс, расположенный в ядреlogging
пакет, отправляет вывод журнала в файл на диске.