Tips
====

- 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
  :file:`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
  (:file:`filename.log` becomes :file:`filename.log.2012-04-10`, for example).
  The :file:`debug.log` file rotates every hour, and maintains six hours of
  logs of every level (``DEBUG`` and up). :file:`bot.log` rotates every day at
  midnight, and maintains seven days of non-debug logs (``INFO`` and up).
  Finally, :file:`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 :py:attr:`logger` attributes
  configured for the specific command or task. If you're working with other
  classes, :py:attr:`bot.logger` is the root logger
  (:py:obj:`logging.getLogger("earwigbot")` by default), so you can use
  :py:func:`~logging.Logger.getChild` to make your logger. For example, task
  loggers are essentially
  :py:attr:`bot.logger.getChild("tasks").getChild(task.name) <bot.logger>`.

- 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
  :command:`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.

.. rubric:: Footnotes

.. [1] In reality, all this does is call :py:meth:`bot.commands.load()
       <earwigbot.managers._ResourceManager.load>` and
       :py:meth:`bot.tasks.load() <earwigbot.managers._ResourceManager.load>`!

.. _logging:         http://docs.python.org/library/logging.html
.. _!git plugin:     https://github.com/earwig/earwigbot-plugins/blob/develop/commands/git.py
.. _Let me know:     ben.kurtovic@gmail.com
.. _create an issue: https://github.com/earwig/earwigbot/issues