python生成日志文件_Python 日志生成器

需求分析

网站日志需求分析

由于缺乏真实网站日志,在这里用 Python 2.7.5 构建日志生成器模拟网站日志,作为之后实验的基础。

之后的实验为用 Flume 采集网站的日志信息,基于此做一系列的处理。

为搭建好网站之后采集真实网站日志信息做准备。

数据集需求分析

由于缺乏有效的 ALS 数据集做为模型的训练与测试,在这里用 Python 2.7.5 构建日志生成器模拟数据集。

为 Spark Streaming + ALS 推荐系统的模型的训练与测试做准备

环境说明

系统: CentOS 7.2 mini

Python 版本: 2.7.5

(PS: Python 为 CentOS 7.2 mini 自带的,可通过 python --version 来查看 Python 的版本,注意 Python 2.X 和 Python 3.X 存在很大的区别,这里采用的是系统自带的 Python 2.7.5)

Python 日志生成器的编写

网站日志生成器的编写

格式可根据实际需求做出调整

generate_log.py 如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92import random

import time

#从什么搜索引擎跳转过来的

http_referers = [

"http://www.baidu.com/s?wd={query}",

"https://www.google.com/search?q={query}",

"https://www.sougou.com/web?query={query}",

"http://cn.bing.com/search?q={query}",

"https://search.yahoo.com/search?p={query}"

]

#搜索关键字

search_keyword = [

"鸡排饭",

"虾排饭",

"芒果布丁",

"海鲜自助",

"水果拼盘",

"黄焖鸡米饭",

"西红柿牛腩面"

]

#网站链接路径

url_path = [

"class/111.html",

"class/112.html",

"class/113.html",

"class/114.html",

"class/115.html",

"class/116.html",

"anyway/666",

"NoBUG/666"

]

#ip地址

ip_slices = [10,123,132,125,168,187,25,66,37,168,131,86,53,19,163]

#状态码

status_codes = ["200","404","500"]

#sample(seq, n)从序列seq中选择n个随机且独立的元素

#随机生成一个带refer和keyword的url

def sample_refer():

if random.uniform(0, 1) > 0.2:

return "_"

refer_str = random.sample(http_referers, 1)

query_str = random.sample(search_keyword, 1)

return refer_str[0].format(query=query_str[0])

#随机生成一个url

def sample_url():

return random.sample(url_path,1)[0]

#随机生成一个ip

def sample_ip():

slice = random.sample(ip_slices,4)

return ".".join([str(item) for item in slice])

#随机生成一个状态码

def sample_status_code():

return random.sample(status_codes,1)[0]

def generate_log(count = 10):

#获取本地时间

time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

#打开access.log文件,并赋予 f 写的权限

#w+为消除文件内容,然后以读写方式打开文件。

#a+为以读写方式打开文件,并把文件指针移到文件尾

#为了将数据连续的写入文件采用 a+

#f = open("/abs/project/data/log/access.log","w+")

f = open("/abs/project/data/log/access.log","a+")

while count >=1:

query_log="{ip}t{local_time}t"GET /{url} HTTP/1.1"t{status_code}t{refer}".format(local_time=time_str,url=sample_url(),ip=sample_ip(),refer=sample_refer(),status_code=sample_status_code())

#测试时输出到控制台,在实际使用中是将他存入相应的文件中

#print query_log

#将日志输入到access.log

f.write(query_log + "n")

count = count - 1

if __name__ == '__main__':

generate_log()

数据集生成器的编写

我们所需要的数据集的格式为:   user_id::food_id::food_rating

可根据实际需求做出调整

generate_dataset.py 如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51import random

#食物id

food_id = [1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,

1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,

1021,1022,1023,1024,1025,1026,1027,1028,1029,1030]

#用户id

user_id = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

#用户对食物的评价

food_rating = [1,2,3,4,5]

#sample(seq, n)从序列seq中选择n个随机且独立的元素

#随机生成一个food

def sample_food():

return random.sample(food_id, 1)[0]

#随机生成一个用户

def sample_user():

return random.sample(user_id, 1)[0]

#随机生成一个食物评价

def sample_foodrating():

return random.sample(food_rating, 1)[0]

def generate_dataset(count = 10):

#打开rating文件,并赋予 f 写的权限

#w+为消除文件内容,然后以读写方式打开文件。

#a+为以读写方式打开文件,并把文件指针移到文件尾

#为了将数据连续的写入文件采用 a+

#f = open("/abs/project/data/dataset/rating","w+")

f = open("/abs/project/data/dataset/rating","a+")

while count >=1:

#query_log="{food}t{user}t{foodrating}".format(food=sample_food(),user=sample_user(),foodrating=sample_foodrating())

query_log="{food}::{user}::{foodrating}".format(food=sample_food(),user=sample_user(),foodrating=sample_foodrating())

#测试时输出到控制台,在实际使用中是将他存入相应的文件中

#print query_log

#将日志输入到rating

f.write(query_log + "n")

count = count - 1

if __name__ == '__main__':

generate_dataset()

扩展

定时执行工具

Linux    crontab

参照介绍可以得出每隔1分钟执行一次的 crontab 表达式   */1****

在 /abs/project 目录中新建日志生成器脚本 log_generator.sh

1

2

3

4# 新建日志生成器脚本 log_generator.sh

vi log_generator.sh

python /abs/lib/generate_log.py

新打开一个界面,然后查看输出 tail -200f /abs/project/data/log/access.log

为 log_generator.sh 增加可执行权限 chmod u+x log_generator.sh

执行脚本 ./log_generator.sh

配置 crontab

1

2

3

4

5

6

7

8

9

10

11# 配置 crontab

crontab -e

# 每隔1分钟执行一次 log_generator.sh

*/1 * * * * /abs/project/log_generator.sh

# 查看 crontab

crontab -l

# 删除 crontab

crontab -r

小结

学会了用 Python 实现日志生成器的代码编写,并在此基础上进行相关拓展

学会了周期性执行任务的守护进程 crontab 的基本操作与使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值