通过管道输出到另一个程序里去,另外一个程序同时打印并输出到out.log。
用自己的myprint代替所有的print语句。这样你可以同时输出到屏幕与文件了。
通过logging。这个模块支持多个listener,可以同时输出到屏幕与文件以及网络。
python test.py >1.log
将输出结果记录到1.log(覆盖写入)
python test.py >>1.log
将输出结果追加到1.log(每次追加)
#coding=utf-8def
initlog():
import
logging
#
生成一个日志对象
logger
=
logging.getLogger()
#
生成一个Handler。logging支持许多Handler,
#
象FileHandler,
SocketHandler,
SMTPHandler等,我由于要写
#
文件就使用了FileHandler。
#
logfile是一个全局变量,它就是一个文件名,如:'crawl.log'
logfile
=
'test.log'
hdlr
=
logging.FileHandler(logfile)
#
成一个格式器,用于规范日志的输出格式。如果没有这行代码,那么缺省的
#
格式就是:"%(message)s"。也就是写日志时,信息是什么日志中就是什么,
#
没有日期,没有信息级别等信息。logging支持许多种替换值,详细请看
#
Formatter的文档说明。这里有三项:时间,信息级别,日志信息
formatter
=
logging.Formatter('%(asctime)s
%(levelname)s
%(message)s')
#
将格式器设置到处理器上
hdlr.setFormatter(formatter)
#
将处理器加到日志对象上
logger.addHandler(hdlr)
#
设置日志信息输出的级别。logging提供多种级别的日志信息,如:NOTSET,
#
DEBUG,
INFO,
WARNING,
ERROR,
CRITICAL等。每个级别都对应一个数值。
#
如果不执行此句,缺省为30(WARNING)。可以执行:logging.getLevelName
#
(logger.getEffectiveLevel())来查看缺省的日志级别。日志对象对于不同
#
的级别信息提供不同的函数进行输出,如:info(),
error(),
debug()等。当
#
写入日志时,小于指定级别的信息将被忽略。因此为了输出想要的日志级别一定
#
要设置好此参数。这里我设为NOTSET(值为0),也就是想输出所有信息
logger.setLevel(logging.NOTSET)
return
logger
logging=initlog()
logging.info(u'注册')
原生loggging类+ TimedRotatingFileHandler类 实现按day hour second 切分import logging
from logging.handlers import TimedRotatingFileHandler
log = logging.getLogger(loggerName)
formatter = logging.Formatter('%(name)-12s %(asctime)s level-%(levelname)-8s thread-%(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)
except Exception, e:
print "writeLog error"
finally:
log.removeHandler(fileTimeHandler)
值 interval的类型
S 秒
M 分钟
H 小时
D 天
W 周
midnight 在午夜
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)