Because of how plugin commands are implemented, their output can be incredibly verbose. Rather than executing even the `set -eo pipefail` parts of a plugin, we immediately check if the command is implemented by a plugin. If it is not, then we continue on as normal.
One side-effect of this change is that plugin commands need to be duplicated again:
- once in the command array
- once for the actual body of the command
- once in the help output
This is also quite hackish, and probably not the best way to decrease trace output. Note that we drop approximately 2k lines worth of logs with this change.
As briefly discussed in #1425, source the `common/functions` file via an
absolute path, rather than determining the relative path by using
`dirname`. 3rd-party plugins should follow suit and use the new
`$PLUGIN_PATH` convention too.
Record events (i.e. pluginhook's calls) as syslog entries and
provide a shortcut command to display the last part of the log
file.
A brief summary of the changes follows:
dokku:
- New DOKKU_EVENTS_LOGFILE envvar to hold logfile location.
plugins/20_events/commands:
- events output log entries, a tail's follow-like mode is
provided too.
- events:[on|off] enables/disables logging.
- events:list lists events that are logged.
plugins/20_events/hook:
- Generic hook that writes log entries. All the events are
registered via symlink to this script.
plugins/common/functions:
- dokku_log_event() writes log entries via logger.
- dokku_log_pluginhook_call() formats log entries and writes
them via dokku_log_event().