python日志切割(日志文件太大,python怎么分割文件,多线程操作)

1.日志文件太大,python怎么分割文件,多线程操作

python的多线程为伪多线程,多线程并不能提高文件IO的速度,在读取文件时使用直接读取 for line in open('文件名', 'r') 效率最高,因为此方式为直接读取,不像其它方式要把文件全部加载到内存再读取,所以效率最高。分割时文件时,提前计算好行数,把读取的每固定数量的行数存入新文件,直接读取完成,最后删除旧文件,即可实现文件分割。

示意代码:

line_count = 0

index = 0

fw = open('part'+str(index)+'.log', 'w')

for line in open('filename.log', 'r'):

fw.write(line)

line_count += 1

# 假设每10000行写一个文件

if line_count > 10000:

fw.close()

index += 1

fw = open('part'+str(index)+'.log', 'w')

fw.close()

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

最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法。

跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多东西。典型的日志记录的步骤是这样的:创建logger 创建handler 定义formatter 给handler添加formatter 给logger添加handler 写成代码差不多就是酱婶的(这个是照别的网页抄的,参考附注):1 import logging23 # 1、创建一个logger4 logger = logging.getLogger('mylogger')5 logger.setLevel(logging.DEBUG)67 # 2、创建一个handler,用于写入日志文件8 fh = logging.FileHandler('test.log')9 fh.setLevel(logging.DEBUG) 10 11 # 再创建一个handler,用于输出到控制台 12 ch = logging.StreamHandler() 13 ch.setLevel(logging.DEBUG) 14 15 # 3、定义handler的输出格式(formatter)16 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 17 18 # 4、给handler添加formatter19 fh.setFormatter(formatter) 20 ch.setFormatter(formatter) 21 22 # 5、给logger添加handler 23 logger.addHandler(fh) 24 logger.addHandler(ch) 之后才可以正式的开始记录日志。

Java里面的java.util.Logging类差不多也是这样,代码还要更复杂一点。Golang的日志相对写法简单一些,不过没有什么格式,系统记录一条时间,内容格式完全自己手画。

第三方的日志库倒是没有接触过,像Java的Log4j,Golang的log4go和seelog等等,不知道用起来会不会简单一点。我一直都记不住这些,因为不太理解logger和handler为什么要这样写。

一直到这次任务中出现的在我看来相当“诡异”的bug,才深入理解了一下。我的任务是这样的,要做一个日志切割的工具,按天将日志分割开,即每天0点产生一个新日志,将旧日志改名。

并且,将超过3个月的日志删除掉,以保证磁盘空间不会被log占满。程序要求可以切割多个目录中的不同日志,具体路径由json中配置。

这里用到了logging.handlers类中的方法,用以获得一个handler。大概的写法为:1 logger = logging.getLogger() #获得logger2 handler = logging.handlers.(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。

因为只是分割,对新日志没有什么影响。函数的方法见附注,或查看python的源码,这个函数是python写的,可以找到定义。

这里我使用的是每秒生成一个新的日志文件,之后用Crontab在每天0点调度,然后用for循环处理json中的每一个日志文件。但是奇怪的是,每次运行程序,第一个切割的日志生成一个分割后的文件,而后面的都生成两个新日志。

百思不得其解。后检查代码觉得,可能是程序中设置的时间太短了,每秒生成一个文件,有可能一秒钟处理不完,就生成了两个。

虽然这个说法没有什么科学根据,但是还是把中的第三个参数改成了60,即每60秒生成一个文件。完成,静静的等待crontab到时间。

叮!时间到。赶紧检查一下结果。

一个好消息和一个坏消息。好消息是这次每个日志都只切割生成了一个新文件,没有生成两个。

坏消息是每个文件里面添加的当天的日期的数量见鬼了。我切割了4条日志,生成的新日志里面就分别写上了一、二、三、四行当天日期。

此刻我的内心几乎是崩溃的。我开始思考为什么会这样。

很明显四行日期是调用了4次logger.fatal('datetime.datetime.now().strftime('%Y-%m-%d')) 这个函数。换句话说,我每一次for循环都在这个log里面写了一句话。

可是明明每个for是处理一个日志,下一次for应该是处理下一个日志的,为什么会再处理这个日志一次?我突然想到,logger.addHandler(handler)是每次循环都会运行的,也就是说,logger是同一个logger,添加了4次handler。到第4次循环的时候,这个logger中有4个handler,也就会往4个不同的日志中添加内容了。

呃。如果是这样的话,那么把上面的程序改改,第一句和最后一句放在循环外,循环内只用中间的三句。

这次OK了。回头再看log记录的步骤,也就明白了logger和handler到底是个什么鬼:logger可以看做是一个记录日志的人,对于记录的每个日志,他需要有一套规则,比如记录的格式(formatter),等级(level)等等,这个规则就是handler。

使用logger.addHandler(handler)添加多个规则,就可以让一个logger记录多个日志。至于logging.getLogger()方法获得的root logger和继承关系,可以详见附注的网页,这里我也只是大概明白了什么意思,还没有具体用过。

也许将来在框架中使用,要记录较为复杂的日志时候会用到吧。

3.怎样对 apache实现日志切割

第一好题网 .1haoti.com

一、日志切割

安装cronolog

CentOS 5.4中编译安装Apache默认日志是不切割的,需要用用工具Cronnolog进行日志切割

1.下载及安装

wget ://cronolog.org/download/cronolog-1.6.2.tar.gz

tar zxvf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

./configure

make && make install

2.用which命令查看路径验证安装

which cronolog

默认路径为:/usr/local/sbin/cronolog

3.配置

vi /usr/local/apache/conf/d.conf

CustomLog “|/usr/local/sbin/cronolog /usr/local/apache/logs/access_%Y%m%d.log” combined 定义访问日志

ErrorLog “|/usr/local/sbin/cronolog /home//ex/log/error_%Y%m%d.log” 定义错误日志

保存配置文件后,重新加载或重启apache服务即可生效。

service d restart

还有另外一种使用rotatelogs 方法:

Linux系统配置方法:

将其改为

ErrorLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/%Y_%m_%d_error_log 86400 480"

CustomLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/%Y_%m_%d_access_log 86400 480" common

Windows系统下配置方法:

#ErrorLog "|bin/rotatelogs.exe logs/error-%y%m%d.log 86400 480"

#CustomLog "|bin/rotatelogs.exe logs/access-%y%m%d.log 86400 480" common

二、apache日志切割

辑Apache的主配置文件,更改内容如下:

注释掉如下两行

ErrorLog logs/error_log

CustomLog logs/access_log common

然后添加如下两行

ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/errorlog.%Y-%m-%d-%H_%M_%S 2M +480"

CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/accesslog.%Y-%m-%d-%H_%M_%S 2M +480" common

意义如下:

errorlog.%Y-%m-%d-%H_%M_%S为生成日志的格式,类似于这样:errorlog.2010-04-15-11_32_30 ,以年月日时分秒为单位的,

2M 为日志的大小,即为日志达到多大后生成新的日志文件,支持的单位为K,M,G,本处为2M

+480 为时差,文件的时间为美国时间,中国的时差要比美国多8个小时也就是480分钟,所以要加上480分钟

还有其他的设置方法如下:

每天生成一个错误日志文件

ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400"

其中86400为轮转的时间单位为秒

4.python分割列表怎么弄啊,没找到的

切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。注意这与你使用的索引操作符十分相似。记住数是可选的,而冒号是必须的。

切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置开始

刚好在 结束 位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。

这样,shoplist[1:3]返回从位置1开始,包括位置2,但是停止在位置3的一个序列切片,因此返回一个含有两个项目的切片。类似地,shoplist[:]返回整个序列的拷贝。shoplist[::3]返回位置3,位置6,位置9…的序列切片。

你可以用负数做切片。负数用在从序列尾开始计算的位置。例如,shoplist[:-1]会返回除了最后一个项目外包含所有项目的序列切片,shoplist[::-1]会返回倒序序列切片。

使用Python解释器交互地尝试不同切片指定组合,即在提示符下你能够马上看到结果。序列的神奇之处在于你可以用相同的方法访问元组、列表和字符串。

5.网站日志太大,如何切割日志

切割日志主要有以下几个方法:

1. split方法分割

split命令专门用来将一个大文件分割成很多个小文件,split命令的选项做一个简要说明:

-b 分割后的文档大小,单位是byte

-C 分割后的文档,单行最大byte数

-d 使用数字作为后缀,同时使用-a length指定后缀长度

-l 分割后文档的行数

2. dd分割

dd bs=1M count=300 if=test.log of=newlog.1

dd bs=1M count=300 if=test.log of=newlog.2 skip=300

dd bs=1M count=300 if=test.log of=newlog.3 skip=600在上面使用的命令中,bs代表数据块的大小,count表示复制的块数,if表示输入文件,of表示输出文件。

这个命令不能一下就把文件分割到我们想要的状态,而且很有可能一行日志被分到两个文件中。

3. head+tail分割

用这两个命令获取文件部分内容,然后重定向就能实现文件分割,但是限制也挺多,只能把文件分成两部分,如果文件特别大,想要达到预期的效果,就要一直分割下去。

head/tail -n $行数 test.log >newlog

因为这两个命令都比较熟悉,不再多讲。

4. sed实现分割

实现原理就是用sed截取特定行之间的内容,然后进行重定向。

sed -n '1,2000000p' test.log >test.log.1

sed -n '2000001,4000000p' test.log >test.log.2

sed -n '4000001,6000000p' test.log >test.log.3

sed -n '6000001,8000000p' test.log >test.log.4

sed -n '8000001,$p' test.log >test.log.5

5. awk实现分割

实现原理和sed差不多,因为使用awk不多,这里只举一个小例子:

awk '{if (NRa.txt

awk '{if (NR>=120000) print $0}' test.log >b.txt

6.python如何将屏幕输出的内容保存成一个日志文件,用控制输出流的方

#-*- coding:utf-8 -*-

import logging

# 配置日志信息

logging.basicConfig(level=logging.DEBUG,

format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',

datefmt='%m-%d %H:%M',

filename='myapp.log',

filemode='w')

# 定义一个Handler打印INFO及以上级别的日志到sys.stderr

console = logging.StreamHandler()

console.setLevel(logging.INFO)

# 设置日志打印格式

formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')

console.setFormatter(formatter)

# 将定义好的console日志handler添加到root logger

logging.getLogger('').addHandler(console)

logging.info('Jackdaws love my big sphinx of quartz.')

logger1 = logging.getLogger('myapp.area1')

logger2 = logging.getLogger('myapp.area2')

logger1.debug('Quick zephyrs blow, vexing daft Jim.')

logger1.info('How quickly daft jumping zebras vex.')

logger2.warning('Jail zesty vixen who grabbed pay from quack.')

logger2.error('The five boxing wizards jump quickly.')

7.请教python 如何分日志级别分文件输出

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

import sys

# make a copy of original stdout route

stdout_backup = sys.stdout

# define the log file that receives your log info

log_file = open("message.log", "w")

# redirect print output to log file

sys.stdout = log_file

print "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 pattern

sys.stdout = stdout_backup

print "Now this will be presented on screen"

python日志切割

转载请注明出处代码入门网 » python日志切割(日志文件太大,python怎么分割文件,多线程操作)

资讯

python模拟手机(python可以写手机程序吗)

阅读(41)

本文主要为您介绍python模拟手机,内容包括python怎么做模拟登陆手机app,python可以写手机程序吗,如何Python写一个安卓APP。可以写。而且有些好玩。比如在安卓上可以用qpython。做服务器,WEB,还有CONSOLE,桌面应用。当然在其它的平台上,按理也

资讯

pythondns服务器(如何通过Python构造一个DNS查询包)

阅读(41)

本文主要为您介绍pythondns服务器,内容包括如何使用python获取本机网关和dns服务器,如何使用python获取本机网关和dns服务器,如何通过Python构造一个DNS查询包。可以尝试以下步骤:ping一个域名,用wireshark抓一个DNS的query,看看各个字段分别

资讯

python全局模块(Python开发中常用的模块有哪些)

阅读(41)

本文主要为您介绍python全局模块,内容包括怎么用Python实现全局,怎么用Python实现全局,Python导入全局,局部模块以及如何让避免循。导入块1. import module2. from module.xx import xx3. from module.xx impo

资讯

python字典的效率(python的效率怎么样)

阅读(41)

本文主要为您介绍python字典的效率,内容包括Pythonpython字典合并哪种方式效率最高,python字典为什么这么快,python的效率怎么样。运行效率慢,但开发效率快如果算法固定就是一次开发就足够了,而不断处理不同的大量数据,建议还是C#等如果算法不

资讯

python计算协方差(如何用python计算方差,平均值)

阅读(39)

本文主要为您介绍python计算协方差,内容包括numpy的COV函数,究竟是什么计算,如何用python计算方差,平均值,协方差怎么计算,请举例说明。python计算均值方差用Python求均值与方差,可以自己写,也可以借助于numpy,不过到底哪个快一点呢?我做了个实

资讯

python判断是否中文

阅读(38)

本文主要为您介绍python判断是否中文,内容包括python判断是不是汉字,python判断是否含有中文,python判断是不是中文字。法一:isinstance(s, str) 用来判断是否为一般字符串isinstance(s, unicode) 用来判断是否为unic

资讯

win8.1python

阅读(45)

本文主要为您介绍win8.1python,内容包括win8.1怎么安装python,python安装不了,电脑是win8.1系统的,python安装不了,电脑是win8.1系统的。步骤如下:下载并安装Python For Windows。打开Python官方网站(python.org),推荐下载Python 2.7

资讯

pythonpip离线(如何制作pip离线安装环境)

阅读(49)

本文主要为您介绍pythonpip离线,内容包括如何制作pip离线安装环境,python怎样离线安装,如何离线安装python扩展。安装Python包,的确是pip最为方便了,简单快捷,因为它直接是从pypi上面下载文件,保证文件的安全性和可靠性,并且资源丰富;下面是

资讯

创建文本python(python怎么创建一个txt文件)

阅读(38)

本文主要为您介绍创建文本python,内容包括python怎么创建一个txt文件,Python中如何创建文件,用python怎么创建一个文件。python怎么创建一个txt文件的方法。如下参考:1.首先使用内置的空闲编辑器进行编辑(右键单击并选择copy),如下图所示。

资讯

python书籍(关于Python的经典入门书籍有哪些)

阅读(63)

本文主要为您介绍python书籍,内容包括python中文电子书在那下,人工智能,Python自学书籍在哪点可以下载,谁有《简明Python教程》电子书下载地址。我接触的如下:《Python学习手册》,死贵的书,但是看完了似乎没什么卵用。我一直拿来跟学习Perl的

资讯

python.join(列表)(python如何字符串转列表)

阅读(46)

本文主要为您介绍python.join(列表),内容包括python列表怎么调用join,python'list'objecthasnoattribute'join'如何解决,求python中join和split的详解。可以使用字符串的join方法,可以把列表的各个元素连接起来,字符串就是连

资讯

python选择文件(python中选择文件夹即路径的对话框如何实现)

阅读(73)

本文主要为您介绍python选择文件,内容包括如何在python中选择一个文件,python如何选择文件,并获得所选择文件的全路径名称,python中选择文件夹(即路径)的对话框如何实现。首先,确保我们已经正确安装了python2.7的环境,然后,编辑一个.py文件。

资讯

python发飞信(python发送短信)

阅读(45)

本文主要为您介绍python发飞信,内容包括python发送短信,向手机发送短信的python源代码,该怎么解决,python发送短信。在电脑上用python给手机发短信我刚才试了,查了查资料,没有想象中的那么复杂:在https://github.com/whtsky/P

资讯

python模拟手机(python可以写手机程序吗)

阅读(41)

本文主要为您介绍python模拟手机,内容包括python怎么做模拟登陆手机app,python可以写手机程序吗,如何Python写一个安卓APP。可以写。而且有些好玩。比如在安卓上可以用qpython。做服务器,WEB,还有CONSOLE,桌面应用。当然在其它的平台上,按理也

资讯

pythondns服务器(如何通过Python构造一个DNS查询包)

阅读(41)

本文主要为您介绍pythondns服务器,内容包括如何使用python获取本机网关和dns服务器,如何使用python获取本机网关和dns服务器,如何通过Python构造一个DNS查询包。可以尝试以下步骤:ping一个域名,用wireshark抓一个DNS的query,看看各个字段分别

资讯

python全局模块(Python开发中常用的模块有哪些)

阅读(41)

本文主要为您介绍python全局模块,内容包括怎么用Python实现全局,怎么用Python实现全局,Python导入全局,局部模块以及如何让避免循。导入块1. import module2. from module.xx import xx3. from module.xx impo

资讯

python字典的效率(python的效率怎么样)

阅读(41)

本文主要为您介绍python字典的效率,内容包括Pythonpython字典合并哪种方式效率最高,python字典为什么这么快,python的效率怎么样。运行效率慢,但开发效率快如果算法固定就是一次开发就足够了,而不断处理不同的大量数据,建议还是C#等如果算法不

资讯

python计算协方差(如何用python计算方差,平均值)

阅读(39)

本文主要为您介绍python计算协方差,内容包括numpy的COV函数,究竟是什么计算,如何用python计算方差,平均值,协方差怎么计算,请举例说明。python计算均值方差用Python求均值与方差,可以自己写,也可以借助于numpy,不过到底哪个快一点呢?我做了个实

资讯

python判断是否中文

阅读(38)

本文主要为您介绍python判断是否中文,内容包括python判断是不是汉字,python判断是否含有中文,python判断是不是中文字。法一:isinstance(s, str) 用来判断是否为一般字符串isinstance(s, unicode) 用来判断是否为unic

资讯

win8.1python

阅读(45)

本文主要为您介绍win8.1python,内容包括win8.1怎么安装python,python安装不了,电脑是win8.1系统的,python安装不了,电脑是win8.1系统的。步骤如下:下载并安装Python For Windows。打开Python官方网站(python.org),推荐下载Python 2.7

资讯

windows编译python

阅读(51)

本文主要为您介绍windows编译python,内容包括如何在windows下编译执行python脚本,在windows下怎么编译python?,windows怎么安装python编译环境。Python安装好以后,在开始菜单会看到一个idle工具(一个增强的交互命令行解释器窗口)以及一个自带

资讯

python3.4爬虫入门(如何入门Python爬虫)

阅读(1)

本文主要为您介绍python3.4爬虫入门,内容包括如何入门Python爬虫,python爬虫入门需要哪些基础,python爬虫自学要多久。可以先从简单的开始,在熟悉了Python语法后,学习用 urllib 和 urllib2 爬虫,使用 BeautifulSoup 分析结

资讯

python判定整数(怎样用python判断整数)

阅读(2)

本文主要为您介绍python判定整数,内容包括python怎么判断一个数是整数,python判断一个数是不是整数,python判断一个数是不是整数。import typesif type(var) in [types.IntType,types.LongType]: bodyelse

资讯

python画仪表(如何使用Python在屏幕上作画)

阅读(2)

本文主要为您介绍python画仪表,内容包括如何用python绘制各种图形,如何用Python绘制Circos图,如何使用Python在屏幕上作画。from turtle import *def curvemove():for i in range(200):right(1)forw

资讯

python写入文件编码格式(python2.7.4怎么指定格式编码的文本)

阅读(1)

本文主要为您介绍python写入文件编码格式,内容包括python写文件怎么写gbk编码的文件,python2.7.4怎么指定格式编码的文本,python2.7.4怎么指定格式编码的文本。要写入的数据本身就是byte串(u中文是中文字符串,中文是byte串),用二进制方式打开就

资讯

python小数点保留1位(如何在Python中保留小数)

阅读(2)

本文主要为您介绍python小数点保留1位,内容包括如何在Python中保留小数,Python中小数点的问题,怎么放弃后面位数,只保留前面两位搜狗,python中保留几位小数进行四舍五入的round函数自身的源代码是什么。f = lambda x, n: round(x, n - len(

资讯

python数据采集教程(如何用最简单的Python爬虫采集整个网站)

阅读(2)

本文主要为您介绍python数据采集教程,内容包括如何用最简单的Python爬虫采集整个网站,python做监控数据采集,怎么做.新手请教,如何学习爬虫技术抓取数据。在之前的文章中Python实现“维基百科六度分隔理论“之基础爬虫,我们实现了在一个网站