我可以从python';登录mongoDB吗;逐行';?
目前,上面的代码成功地将我的日志文件(本例中为test.log)存储到mongodb中 但是,包含许多行的整个日志文件作为一个文档存储到mongodb中 由于我的日志文件是以行分隔的,有没有办法将日志文件逐行存储到mongodb中,以存储尽可能多的文档 我尝试过将它解析成行,但它是数组格式的,所以mongodb无法成功读取它 谢谢我可以从python';登录mongoDB吗;逐行';?,python,mongodb,Python,Mongodb,目前,上面的代码成功地将我的日志文件(本例中为test.log)存储到mongodb中 但是,包含许多行的整个日志文件作为一个文档存储到mongodb中 由于我的日志文件是以行分隔的,有没有办法将日志文件逐行存储到mongodb中,以存储尽可能多的文档 我尝试过将它解析成行,但它是数组格式的,所以mongodb无法成功读取它 谢谢 日志样本: {“asctime”:“2019-11-19 04:12:06414”,“levelname”:“DEBUG”,“name”:“passlib.regis
日志样本:
{“asctime”:“2019-11-19 04:12:06414”,“levelname”:“DEBUG”,“name”:“passlib.registry”,“threadName”:“MainThread”,“message”:“registed'pbkdf2_sha256'handler:”}
{“asctime”:“2019-11-19 04:12:06459”,“levelname”:“INFO”,“name”:“werkzeug”,“threadName”:“main thread”,“message”:“*在0.0.0.0:5000上运行(按CTRL+C退出)”}
您的read()
调用将整个文件读取到单个文档中。请尝试以下方法:
{"asctime": "2019-11-19 04:12:06,414", "levelname": "DEBUG", "name": "passlib.registry", "threadName": "MainThread", "message": "registered 'pbkdf2_sha256' handler: <class 'passlib.handlers.pbkdf2.pbkdf2_sha256'>"}
{"asctime": "2019-11-19 04:12:06,459", "levelname": "INFO", "name": "werkzeug", "threadName": "MainThread", "message": " * Running on 0.0.0.0:5000 (Press CTRL+C to quit)"}
迭代行数组,为每行生成一个新的
条目
,并insert()
每个条目
。或者,应该有一些等价的insertMany()
,在这种情况下,您可以对数组执行map()
,以生成条目的数组,并将结果传递到insertMany()
调用中,我将使用logstsh插件:您可以发布一个日志数据的小样本,看看这些行是什么样子的(很容易提出建议)。@prasad_u{“asctime”:“2019-11-19 04:12:06414”,“levelname”:“DEBUG”,“name”:“passlib.registry”,“threadName”:“MainThread”,“message”:“registed'pbkdf2_sha256”处理程序:“}{”asctime:”“2019-11-19 04:12:06459”,“levelname:“INFO”,“name:“werkzeug”,“threadName:“main thread”,“message:“*在0.0.0.0:5000上运行(按CTRL+C退出)”}很抱歉安排混乱,但这种json日志有很多行!每行之间用空格分隔\n@GiovaniSalazar这对我有用吗?
{"asctime": "2019-11-19 04:12:06,414", "levelname": "DEBUG", "name": "passlib.registry", "threadName": "MainThread", "message": "registered 'pbkdf2_sha256' handler: <class 'passlib.handlers.pbkdf2.pbkdf2_sha256'>"}
{"asctime": "2019-11-19 04:12:06,459", "levelname": "INFO", "name": "werkzeug", "threadName": "MainThread", "message": " * Running on 0.0.0.0:5000 (Press CTRL+C to quit)"}
import json
import pymongo
import pprint
if __name__ == "__main__":
client = pymongo.MongoClient()
db = client["logdb"]
collection = db["logs"]
with open("test.log", "r") as file:
for line in file: # python knows to iterate line by line
line = line.rstrip() # strip off the newline
print(line) # take a look
doc = json.loads(line) # convert the string to a doc
pprint.pprint(doc) # print doc
collection.insert_one(doc) #insert, use insert_many() for better performance