Logging is a fantastic way to monitor the bot’s progress as it runs. It has a slew of built-in loggers, and enabling log retention (so logs are saved to logs/ in the working directory) is highly recommended. In the normal setup, there are three log files, each of which “rotate” at a specific time (filename.log becomes filename.log.2012-04-10, for example). The debug.log file rotates every hour, and maintains six hours of logs of every level (DEBUG and up). bot.log rotates every day at midnight, and maintains seven days of non-debug logs (INFO and up). Finally, error.log rotates every Sunday night, and maintains four weeks of logs indicating unexpected events (WARNING and up).
To use logging in your commands or tasks (recommended), :py:class:~earwigbot.commands.BaseCommand` and :py:class:~earwigbot.tasks.BaseTask` provide logger attributes configured for the specific command or task. If you’re working with other classes, bot.logger is the root logger (logging.getLogger("earwigbot") by default), so you can use getChild() to make your logger. For example, task loggers are essentially bot.logger.getChild("tasks").getChild(task.name).
A very useful IRC command is “!reload”, which reloads all commands and tasks without restarting the bot. [1] Combined with using the !git plugin for pulling repositories from IRC, this can provide a seamless command/task development workflow if the bot runs on an external server and you set up its working directory as a git repo.
You can run a task by itself instead of the entire bot with earwigbot path/to/working/dir –task task_name.
Questions, comments, or suggestions about the documentation? Let me know, or create an issue so I can improve it for other people.
Footnotes
[1] | In reality, all this does is call bot.commands.load() and bot.tasks.load()! |