logging是什么文件|python 使用logging生成的log文件是什么编码格式脚本的编码格式决定系统的编码格式决定

|

㈠ python logging.getLogger(__name__) 中的__name__是什么文件名吗

logging.getLogger(__name__='root');不是文件名,而是日志记录的用例名handler=logging.FileHandler("Log_test.txt")logger.addHandler(handler)才是文件名,一个用例的logger可以将日志输出到不同文件中,甚至socket

㈡ python 使用logging,生成的log文件是什么编码格式脚本的编码格式决定系统的编码格式决定

log的文件当然是byte格式。或者是无格式的。汉字编码取决于你自己设定的类型。#coding:utf-8这个东西,回只在python2下有效答果。还需要编程器配合。你使用python自带的idle当然是没有问题的。 log中的汉字是一定要编码的。不编码你存贮不了。 编辑器本身的缺省编码格式要与你的源代码编码一致,不然看到的就是乱码。如果是idle,它会根据python脚本自动识别。不过有些编辑器是有些不智能的。它不能理解python脚本第一行的提示。所以有时候,觉着很别扭自己要手工保持编辑器的编码与源码一致。还需要维护那个coding:utf-8不过python3已将这一句去掉了。源代码全部要求使用utf-8编码(也许是utf-16),我很少用python3

㈢ debug logging是什么意思

debug logging 调试记录/日志调试是指编好程序后,用各种手段进行查错和排错的过程。作为程序的正确性不仅仅表现在正常功能的完成上,更重要的是对意外情况的正确处理。而调试日志,则是对调试过程的一种记录,以备日后查验。

㈣ Python中的logger和handler到底是个什么鬼

典型的日志记录的步骤是这样的:

创建logger

创建handler

定义formatter

给handler添加formatter

给logger添加handler

写成代码差不多就是酱婶的(这个是照别的网页抄的,参考附注):

之后才可以正式的开始记录日志。java里面的java.util.Logging类差不多也是这样,代码还要更复杂一点。Golang的日志相对写法简单一些,不过没有什么格式,系统记录一条时间,内容格式完全自己手画。第三方的日志库倒是没有接触过,像Java的Log4j,Golang的log4go和seelog等等,不知道用起来会不会简单一点。我一直都记不住这些,因为不太理解logger和handler为什么要这样写。一直到这次任务中出现的在我看来相当“诡异”的bug,才深入理解了一下。

我的任务是这样的,要做一个日志切割的工具,按天将日志分割开,即每天0点产生一个新日志,将旧日志改名。并且,将超过3个月的日志删除掉,以保证磁盘空间不会被log占满。程序要求可以切割多个目录中的不同日志,具体路径由json中配置。

这里用到了logging.handlers类中的TimedRotatingFileHandler方法,用以获得一个handler。大概的写法为:

1 logger = logging.getLogger() #获得logger2 handler = logging.handlers.TimedRotatingFileHandler(logfile, 'S', 1, 0) #切割日志3 handler.suffix = '%Y%m%d' #切割后的日志设置后缀4 logger.addHandler(handler) #把logger添加上handler5 logger.fatal(datetime.datetime.now().strftime('%Y-%m-%d')) #在新日志中写上当天的日期

这里我没有设置level和formatter。因为只是分割,对新日志没有什么影响。TimedRotatingFileHandler函数的方法见附注,或查看python的源码,这个函数是python写的,可以找到定义。这里我使用的是每秒生成一个新的日志文件,之后用Crontab在每天0点调度,然后用for循环处理json中的每一个日志文件。

㈤ python logging 源文件在哪

首先,想到的是更改logging.basicConfig(filename=logfilename)参数,来实现变更日志文件名的目的。编写代码如下:log_fmt = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'for i in range(1,4):filename = str.format('mylog%d.txt' % i)logging.basicConfig(format=log_fmt, level=logging.DEBUG, filename=filename)logging.debug('This is debug message')logging.info('This is info message')logging.warning('This is warning message')12345678运行结果没有达到预期的效果,只有日志文件mylog1.txt被创建,mylog2.txt和mylog3.txt都未被创建,连续3次的输出的内容都写入mylog1.txt中。说明logging.basicConfig()设置属性具有全局性,第一次设置之后,之后再设置将不再生效。查看官方文档,也确实是如此。

㈥ 如何设置和使用log

一、Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。1、LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。2、Appenders禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。常使用的类如下:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)配置模式:log4j.appender.appenderName = classNamelog4j.appender.appenderName.Option1 = value1…log4j.appender.appenderName.OptionN = valueN3、Layouts有时用户希望根据自己的喜好格式化自己的日志输出,Log4j可以在Appenders的后面附加Layouts来完成这个功能。Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。常使用的类如下:org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)配置模式:log4j.appender.appenderName.layout =classNamelog4j.appender.appenderName.layout.Option1 = value1…log4j.appender.appenderName.layout.OptionN = valueN二、配置详解在实际应用中,要使Log4j在系统中运行须事先设定配置文件。配置文件事实上也就是对Logger、Appender及Layout进行相应设定。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties属性文件。下面以properties属性文件为例介绍log4j.properties的配置。1、配置根Logger:log4j.rootLogger = [ level ] , appenderName1, appenderName2, …log4j.additivity.org.apache=false:表示Logger不会在父Logger的appender里输出,默认为true。level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。例如:log4j.rootLogger=INFO,A1,B2,C32、配置日志信息输出目的地(appender):log4j.appender.appenderName = classNameappenderName:自定义appderName,在log4j.rootLogger设置中使用;className:可设值如下:(1)org.apache.log4j.ConsoleAppender(控制台)(2)org.apache.log4j.FileAppender(文件)(3)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)(4)org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)(5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)(1)ConsoleAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。Target=System.err:默认值是System.out。(2)FileAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。(3)DailyRollingFileAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。DatePattern='.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM。另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:1)'.'yyyy-MM:每月2)'.'yyyy-ww:每周3)'.'yyyy-MM-dd:每天4)'.'yyyy-MM-dd-a:每天两次5)'.'yyyy-MM-dd-HH:每小时6)'.'yyyy-MM-dd-HH-mm:每分钟(4)RollingFileAppender选项:Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。MaxFileSize=100KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。3、配置日志信息的输出格式(Layout):log4j.appender.appenderName.layout=classNameclassName:可设值如下:(1)org.apache.log4j.HTMLLayout(以HTML表格形式布局)(2)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)(3)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)(4)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)(1)HTMLLayout选项:LocationInfo=true:输出java文件名称和行号,默认值是false。Title=My Logging: 默认值是Log4J Log Messages。(2)PatternLayout选项:ConversionPattern=%m%n:设定以怎样的格式显示消息。格式化符号说明:%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。%r:输出自应用程序启动到输出该log信息耗费的毫秒数。%t:输出产生该日志事件的线程名。%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。%c:输出日志信息所属的类目,通常就是所在类的全名。%M:输出产生日志信息的方法名。%F:输出日志消息产生时所在的文件名称。%L::输出代码中的行号。%m::输出代码中指定的具体日志信息。%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。%%:输出一个"%"字符。另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。2)%-20c:"-"号表示左对齐。3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。附:Log4j比较全面的配置Log4j配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。log4j.rootLogger=DEBUG,console,dailyFile,imlog4j.additivity.org.apache=true# 控制台(console)log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Threshold=DEBUGlog4j.appender.console.ImmediateFlush=truelog4j.appender.console.Target=System.errlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# 日志文件(logFile)log4j.appender.logFile=org.apache.log4j.FileAppenderlog4j.appender.logFile.Threshold=DEBUGlog4j.appender.logFile.ImmediateFlush=truelog4j.appender.logFile.Append=truelog4j.appender.logFile.File=D:/logs/log.log4jlog4j.appender.logFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# 回滚文件(rollingFile)log4j.appender.rollingFile=org.apache.log4j.RollingFileAppenderlog4j.appender.rollingFile.Threshold=DEBUGlog4j.appender.rollingFile.ImmediateFlush=truelog4j.appender.rollingFile.Append=truelog4j.appender.rollingFile.File=D:/logs/log.log4jlog4j.appender.rollingFile.MaxFileSize=200KBlog4j.appender.rollingFile.MaxBackupIndex=50log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# 定期回滚日志文件(dailyFile)log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.dailyFile.Threshold=DEBUGlog4j.appender.dailyFile.ImmediateFlush=truelog4j.appender.dailyFile.Append=truelog4j.appender.dailyFile.File=D:/logs/log.log4jlog4j.appender.dailyFile.DatePattern='.'yyyy-MM-ddlog4j.appender.dailyFile.layout=org.apache.log4j.PatternLayoutlog4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# 应用于socketlog4j.appender.socket=org.apache.log4j.RollingFileAppenderlog4j.appender.socket.RemoteHost=localhostlog4j.appender.socket.Port=5001log4j.appender.socket.LocationInfo=true# Set up for Log Factor 5log4j.appender.socket.layout=org.apache.log4j.PatternLayoutlog4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# Log Factor 5 Appenderlog4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appenderlog4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000# 发送日志到指定邮件log4j.appender.mail=org.apache.log4j.net.SMTPAppenderlog4j.appender.mail.Threshold=FATALlog4j.appender.mail.BufferSize=10log4j.appender.mail.From = [email protected]log4j.appender.mail.SMTPHost=mail.comlog4j.appender.mail.Subject=Log4J Messagelog4j.appender.mail.To= [email protected]log4j.appender.mail.layout=org.apache.log4j.PatternLayoutlog4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# 应用于数据库log4j.appender.database=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.database.URL=jdbc:mysql://localhost:3306/testlog4j.appender.database.driver=com.mysql.jdbc.Driverlog4j.appender.database.user=rootlog4j.appender.database.password=log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) –> [%t] %l: %m %x %n')log4j.appender.database.layout=org.apache.log4j.PatternLayoutlog4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n# 自定义Appenderlog4j.appender.im = net.cybercorlin.util.logger.appender.IMAppenderlog4j.appender.im.host = mail.cybercorlin.netlog4j.appender.im.username = usernamelog4j.appender.im.password = passwordlog4j.appender.im.recipient = [email protected]log4j.appender.im.layout=org.apache.log4j.PatternLayoutlog4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) –> [%t] %l: %m %x %n

㈦ log是什么文件可以删除吗

log是系统的日志文件,一般是系统或者某些软件对已完成的某种处理的记录,一般是没有比较固定的格式通常会试文本格式可以用记事本打开,如果是其他格式需要用特定软件打开。

log文件可以删除的,Log文件文件跟系统以及软件等没有直接关联,说白了就是系统或者软件产生的记录文件,类似于记事本文本,删除了不会影响系统或者软件本身的正常使用。

(7)logging是什么文件扩展阅读:

LOG文件中还有一个重要的文件是E ES56V-PI Data Fax Voice Modem.log, 注意E ES56V-PI Data Fax Voice Modem是使用者的modem的名称,也就是金网霸3621-1,这时详细记载着每次用猫的情况。

因此使用者用modem上网,这里都有记录,会记录着使用者的modem的初始化命令,开始拨号时间,连接速度、断开时间、上传、下载数据量,不知道看了这个文件上网时还要不要上网记费软件。

还有" op3.log"," mtp.log","cleanup.log"这些LOG文件,这里记录了每次上网收发信的详细情况,从这里可以看出每次发了几封信,收了几封信,删了几封信。注意这里本人是用outlook expre 来收发电子邮件的。

参考资料:网络 – log

㈧ python logging 意图:根据运行的不同时间来创建log文件,而不是固定命名,如:2013-06-13.log

原生loggging类+TimedRotatingFileHandler类实现按dayhoursecond切分importloggingfromlogging.log=logging.getLogger(loggerName)formatter=logging.Formatter('%(name)-12s%(asctime)slevel-%(levelname)-8sthread-%(thread)-8d%(message)s')#每行日志的前缀设置fileTimeHandler=TimedRotatingFileHandler(BASIC_LOG_PATH+filename,"S",1,10)fileTimeHandler.suffix="%Y%m%d.log"#设置切分后日志文件名的时间格式默认filename+"."+suffix如果需要更改需要改logging源码fileTimeHandler.setFormatter(formatter)logging.basicConfig(level=logging.INFO)fileTimeHandler.setFormatter(formatter)log.addHandler(fileTimeHandler)try:log.error(msg)exceptException,e:print"writeLogerror"finally:log.removeHandler(fileTimeHandler)

值 interval的类型S 秒M 分钟H 小时D 天W 周midnight 在午夜

㈨ python logging.conf是什么类型文件

下面的函数用于配置logging模块,它们位于logging.config模块中。你可以使用这些函数来配置,也可以在logging或是logging.handlers中声明它们来配置。logging.config.dictConfig(config)从dictionary中获取logging配置logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)从指定的fname的配置文件中读取logging配置文件该函数可以在应用程序中多次调用logging.config.listen(port=DEFAULT_LOGGING_CONFIG_PORT)在指定端口启动socket server并侦听新配置logging.config.stopListening()关闭先前正在侦听的serverConfiguration file format被fileConfiguration()所理解的配置文件格式基于configparser功能。配置文件必须包含[loggers], [handlers]和[formatters],它们分别代表日志文件中定义的每种类型的实体。对这3种实体,后面有一个单独的section来定义该实体如何配置。因此,[loggers]节中名为log01的logger,相关的配置文件细节在[logger_log01]节中定义。类似地,[handlers]节中名为hand01的handler将在[handler_hand01]节中声明,[formatters]节中的form01将在[formatter_form01]声明。root logger配置必须在[logger_root]节声明。注意:fileConfig() API比dictConfig()旧,并不包含logging某些方面的功能。建议以后尽量使用dictConfig API。配置文件的例子如下:[loggers]keys=root,log02,log03,log04,log05,log06,log07[handlers]keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09[formatters]keys=form01,form02,form03,form04,form05,form06,form07,form08,form09root logger必须指定一个级别和handlers列表。示例如下:[logger_root]level=NOTSEThandlers=hand01其中level可以是DEBUG, INFO, WARNING, ERROR, CRITICAL or NOTSET之一,仅对root logger来说,NOTSET意味着所有的log message都会记录。对非root的logger,强制要求一些额外信息,比如[logger_parser]level=DEBUGhandlers=hand01propagate=1qualname=compiler.parser当一个非root的logger中level被配置为NOSET,它将通过上一级的logger来确定当前logger的有效级别。propagete为1表示message必须传播到上一级logger中,为0表示不传。qualname表示该logger的层级channel名称,这就是说,应用程序使用该名称可以得到该logger对象。handler类型很多,主要有StreamHandler,FileHandler,NullHandler,SysLogHandler,HTTPHandler等handler节对应的配置示例如下:[handler_hand01]class=StreamHandlerlevel=NOTSETformatter=form01args=(sys.stdout,)class表示该handler在logging包命名空间中的类名,level表示logger的级别,NONSET表示要记录所有日志。formatter表示该handler的formatter的键名,假如空白的话,就使用默认值logging._defaultFormatter。假如formatter指定了该名字,必须在对应的section声明。args字段是handler类的构造函数的变量列表,参考相关handler构造函数,或者下面的例子,去观察通常的元素是如何构造的。比如:[handler_hand02]class=FileHandlerlevel=DEBUGformatter=form02args=('python.log', 'w')下面是formatter的配置[formatter_form01]format=F1 %(asctime)s %(levelname)s %(message)sdatefmt=class=logging.Formatterformat字段是全局格式字符串,datefmt是strftime()兼容的date/time格式字符串,为空时使用默认的ISO8601格式,比如2003-01-23 00:29:50,411,class字段表示formatter的类名,日志级别如下:Level Numeric valueCRITICAL 50ERROR 40WARNING 30INFO 20DEBUG 10NOTSET 0logging.handlers解读logging模块中定义了这3个handler:StreamHandler, FileHandler and NullHandler其它的handler都在logging.handler中定义,一并说明如下:StreamHandler该类位于logging包,将logging output输出到流中,比如sys.stdout,sys.stderr或任何支持write()和flush()方法的类文件对象class logging.StreamHandler(stream=None)假如指定了stream名称,日志将输出到流实例中,否则,日志输出到sys.stderrFileHandler该类位于logging包,将logging output输出到磁盘文件中,文件默认无限增长class logging.FileHandler(filename, mode='a', encoding=None, delay=False)打开指定的文件并记录日志,假如mode没有设置,默认使用'a'表示追加日志到文件中。NullHandler该对象什么也不处理WatchedFileHandler一个FileHandler实例,监视日志文件的变化,假如文件变化了,它会关闭并重新打开,不建议在Windows下使用文件的变化可以发生,当应用程序使用newsyslog和logrotate来实现日志文件的回滚时。这个handle是在Unix/Linux下面,监视文件是否改变。(一个文件认为改变了,假如它的device厚实inode已经改变),将旧的文件关闭,这个流打开。class logging.handlers.WatchedFileHandler(filename[, mode[, encoding[, delay]]])指定的文件被打开,用来记录日志,假如mode未指示,默认使用aRotatingFileHandler支持磁盘文件的回滚class logging.handlers.RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0)你可以使用 maxBytes和backupCount值去让日志文件在预设大小时回滚。只要日志文件在长度上接近maxBytes时,就会关闭旧日志文件,打开一个新的日志文件,实现回滚。假如maxBytes或backupCount为0,回滚不会发生。假如backupCount非零,系统会备份旧文件,文件名后加‘.1’, ‘.2’ 。比如,日志文件名为app.log,backupCount为5,将会得到app.log, app.log.1, app.log.2, 直到app.log.5这6个文件。写入日志的文件总是app.log,当这个文件填满时,就关闭它并重命名为app.log.1, 假如还存在app.log.1, app.log.2等文件,就逐一改名为app.log.2, app.log.3等等。TimedRotatingFileHandler支持在指定时间段内回滚日志class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)回滚基于when和interval设置,when指定interval的类型,参见下表,大小写不敏感,默认按小时回滚Value Type of interval'S' Seconds'M' Minutes'H' Hours'D' Days'W0'-'W6' Weekday (0=Monday)'midnight' Roll over at midnight回滚扩展名使用strftime format %Y-%m-%d_%H-%M-%S或其头部子字符串,当使用基于weekday的回滚时,W0表示周一,……,W6表示周日,interval的值不会用到backupCount表示备份数,当日志很多时,新日志会覆盖旧日志,删除逻辑使用interval值去决定删除哪些日志文件utc为true,表示使用UTC时间,否则使用本地时间SocketHandler通过网络套接字输出日志,SocketHandler类的基类使用TCP socketclass logging.handlers.SocketHandler(host, port)向指定地址和端口的远程主机发送日志DatagramHandler继承自基类SocketHandler类,使用UDP socket发送日志messageclass logging.handlers.DatagramHandler(host, port)SysLogHandler发送日志到远程或是本地unix syslogclass logging.handlers.SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)NTEventLogHandler发送日志消息到本地Windows NT, Windows 2000 or Windows XP event logclass logging.handlers.NTEventLogHandler(appname, dllname=None, logtype='Application')SMTPHandler通过SMTP将日志消息发送到email addressMemoryHandler支持将日志message缓存到内存中,周期性刷新日志到target handlerclass logging.handlers.BufferingHandler(capacity)class logging.handlers.MemoryHandler(capacity, flushLevel=ERROR, target=None)HTTPHandler使用GET或是POST,将日志message发送到web serverclass logging.handlers.HTTPHandler(host, url, method='GET')

㈩ python中log info 是什么文件

a. 利用sys.stdout将print行导向到你定义的日志文件中,例如:

import sys# make a of original stdout routestdout_backup = sys.stdout# define the log file that receives your log infolog_file = open("message.log", "w")# redirect print output to log filesys.stdout = log_fileprint "Now all print info will be written to message.log"# any command line that you will execute…log_file.close()# restore the output to initial patternsys.stdout = stdout_backupprint "Now this will be presented on screen"

b. 利用logging模块(规范化日志输出,推荐!!)由于logging模块的功能比较多,下面就放一些文档里介绍的简单的例子,更详细具体的用法请戳这里

需求

最好的实现方式

故障调查或者状态监测 logging.info()或logging.debug()(后者常用于针对性检测诊断的目的)

特定运行事件发出警告 logging.warning()

报告错误抑制不出发异常(常见于长时间运行的服务器进程的错误处理程序) logging.error(), logging.exception()或者logging.critical()

而以下是根据事件的严重性程度而应采取的logging函数的建议:

程度

使用场景

DEBUG 获得诊断问题是具体的信息

INFO 确认程序是否按正常工作

WARNING 在程序还正常运行时获取发生的意外的信息,这可能会在之后引发异常(例如磁盘空间不足)

ERROR 获取程序某些功能无法正常调用这类严重异常的信息

CRITICAL 获取程序无法继续运行的这类最严重异常信息

默认的等级是WARNING,也就是说logging函数在没有特别配置的前提下只追踪比WARNING程度更严重的异常。

下面就用一些例子来具体说明如何用logging函数记录日志信息:

# this is a simple exampleimport logging# define the log file, file mode and logging levellogging.basicConfig(filename='example.log', filemode="w", level=logging.DEBUG)logging.debug('This message should go to the log file')logging.info('So should this')logging.warning('And this, too')

查看example.log文件可以看到以下信息:

DEBUG:root:This message should go to the log fileINFO:root:So should thisWARNING:root:And this, too

从多个文件记录日志

# myapp.pyimport loggingimport mylibdef main():logging.basicConfig(filename='myapp.log', level=logging.INFO)logging.info('Started')mylib.do_something()logging.info('Finished')if __name__ == '__main__':main()# mylib.pyimport loggingdef do_something():logging.info('Doing something')

输出的信息为

INFO:root:StartedINFO:root:Doing somethingINFO:root:Finished

改变默认输出信息的格式

import logging# output format: output time – logging level – log messageslogging.basicConfig(format='%(asctime)s – %(levelname)s – %(message)s')logging.warning('This message will appear in python console.')

在python console中直接打印以下输出:

2016-8-2 2:59:11, 510 – WARNING – This message will appear in python console

logging高级用法可以通过构建logger或者读取logging config文件对logging函数进行任意配置。

构建logger法

import logging# create loggerlogger = logging.getLogger('simple_example')logger.setLevel(logging.DEBUG)# create console handler and set level to debugch = logging.StreamHandler()ch.setLevel(logging.DEBUG)# create formatterformatter = logging.Formatter('%(asctime)s – %(name)s – %(levelname)s – %(message)s')# add formatter to chch.setFormatter(formatter)# add ch to loggerlogger.addHandler(ch)# 'application' codelogger.debug('debug message')logger.info('info message')logger.warn('warn message')logger.error('error message')logger.critical('critical message')

以上程序结果会输出到python console中:

$ python simple_logging_mole.py2005-03-19 15:10:26,618 – simple_example – DEBUG – debug message2005-03-19 15:10:26,620 – simple_example – INFO – info message2005-03-19 15:10:26,695 – simple_example – WARNING – warn message2005-03-19 15:10:26,697 – simple_example – ERROR – error message2005-03-19 15:10:26,773 – simple_example – CRITICAL – critical message

读取配置文件法

import loggingimport logging.configlogging.config.fileConfig('logging.conf')# create loggerlogger = logging.getLogger('simpleExample')# 'application' codelogger.debug('debug message')logger.info('info message')logger.warn('warn message')logger.error('error message')logger.critical('critical message')

其中logging.conf文件格式为:(其实就是将前一种方法的各项配置参数写到logging.conf文件中)

[loggers]keys=root,simpleExample[handlers]keys=consoleHandler[formatters]keys=simpleFormatter[logger_root]level=DEBUGhandlers=consoleHandler[logger_simpleExample]level=DEBUGhandlers=consoleHandlerqualname=simpleExamplepropagate=0[handler_consoleHandler]class=StreamHandlerlevel=DEBUGformatter=simpleFormatterargs=(sys.stdout,)[formatter_simpleFormatter]format=%(asctime)s – %(name)s – %(levelname)s – %(message)sdatefmt= '%m/%d/%Y %I:%M:%S %p'

与前面一样,上述文件输出结果为:

$ python simple_logging_config.py2005-03-19 15:38:55,977 – simpleExample – DEBUG – debug message2005-03-19 15:38:55,979 – simpleExample – INFO – info message2005-03-19 15:38:56,054 – simpleExample – WARNING – warn message2005-03-19 15:38:56,055 – simpleExample – ERROR – error message2005-03-19 15:38:56,130 – simpleExample – CRITICAL – critical message


赞 (0)