我在哪里可以找到蝗虫日志?

时间:2014-09-25 22:35:42

标签: logging locust

我正在使用蝗虫对我们的应用进行压力测试。

由于POST调用似乎不正确,我收到错误。我在哪里可以看到蝗虫的日志?我希望看看帖子的内容是什么样的,看看有什么不对。

这是我的代码,万一有人可以告诉我我做错了什么:

from locust import HttpLocust, TaskSet, task

json3 = """{"stack_name": "beenz-php-app-12", "disable_rollback": true, "template": "php", "timeout_mins": 60}"""

class MyTaskSet(TaskSet):
    @task
    def send(self):
             response = self.client.post("/stacks", json3, headers={'X-Auth-Key': 'xxxx', 'Content-Type': 'application/json', 'X-Auth-User': 'xxxx', 'Accept': 'application/json', 'X-Auth-Token':'xxxx'})
            print "Response status code:", response.status_code
            print "Response content:", response.content

class MyLocust(HttpLocust):
    task_set = MyTaskSet
    min_wait = 5000
    max_wait = 15000

谢谢!

5 个答案:

答案 0 :(得分:6)

通过在启动蝗虫时添加--logfile=locustfile.log参数,您的print消息将被重定向到名为locustfile.log的文件,我认为这是您提到的 log 在你的问题。

假设您的蝗虫文件名为locustfile.py。你在本地机器上运行蝗虫。你可以locust --host=http://127.0.0.1 --logfile=locustfile.log开始蝗虫。然后,您就可以在http://127.0.0.1:8089/上运行蝗虫测试。

答案 1 :(得分:1)

其他人提到的--logfile选项可能是最简单的路线。请注意,您可能希望记录消息而不是打印消息。我认为locust会设置一个特殊的stdout记录器,以便print消息进入控制台,但不会进入日志文件。

--logfile的替代方法是利用python的日志系统添加自己的文件追加器。如果您需要滚动文件追加器,或者您更喜欢使用蝗虫配置格式的日志格式,这是一个不错的选择。

以下是我们如何在蝗虫测试中设置和使用日志记录的示例。请注意taskset的每个实例如何记录到自己的记录器。这样可以轻松地将日志文件过滤到单个蝗虫。另请注意,我们将所有HTTP错误记录为警告。

from locust import HttpLocust, TaskSet, task
import itertools
import logging
import socket
from logging.handlers import RotatingFileHandler

def append_file_logger():
    root_logger = logging.getLogger()
    log_format = "%(asctime)s.%(msecs)03d000 [%(levelname)s] {0}/%(name)s : %(message)s".format(socket.gethostname())
    formatter = logging.Formatter(log_format, '%Y-%m-%d %H:%M:%S')
    file_handler = RotatingFileHandler('./locust.log', maxBytes=5 * 1024 * 1024, backupCount=3)
    file_handler.setFormatter(formatter)
    file_handler.setLevel(logging.INFO)
    root_logger.addHandler(file_handler)    

append_file_logger()

counter = itertools.count()

class FooTaskSet(TaskSet):
    def on_start(self):
        self.logger = logging.getLogger('locust-%03d' % counter.next())
        self.logger.info('Hatching locust')

    @task
    def send(self):
        response = self.client.post(...)
        if not response.ok:
            self.logger.warn('Error sending post') # TODO add status code, url, and reponse to the log 

最终建议:如果您有多个任务,请将它们配置为使用相同的格式记录所有http错误。可以轻松从日志中提取数据。

答案 2 :(得分:0)

您在response = self.client.post(...开头的行上有语法错误。最后一个字符串永远不会关闭:'X-Auth-Token':'xxxx}

将其更改为'X-Auth-Token':'xxxx'},脚本应该可以正常工作。

使用您发布的脚本启动Locust时(语法错误),您将立即获得异常和堆栈跟踪。

答案 3 :(得分:0)

如果不明显,则没有默认设置。 https://github.com/locustio/locust/blob/master/locust/main.py

第167行

# log file
parser.add_option(
    '--logfile',
    action='store',
    type='str',
    dest='logfile',
    default=None,
    help="Path to log file. If not set, log will go to stdout/stderr",
)

只需传递首选位置,以防作为后面提到的后台进程运行。

答案 4 :(得分:0)

将以下代码段添加到您的蝗虫文件中:

import logging
log = logging.getLogger()
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh = logging.FileHandler('locust.log')
fh.setLevel(logging.DEBUG)

现在,您可以保留记录器或打印语句,它们将被填充到您的“ locust.log” 文件中。
这应该为你做魔术。