Gives your ember-cli app remote logging capabilities.
ember install ember-cli-remote-logger
ember install ember-network
This addon will look up your application adapter and use it to build a request
to send the log entries with. Your adapter's host, namespace, and headers are
included in the request. In addition to your adapter's headers a Content-Type
of text/plain is added and the body of the request is, accordingly,
plain text. The request is sent using ember-network/fetch, so it's FastBoot
compatible.
So, for example, if your adapter's host is https://www.example.com and your
namespace is api/v1 then log entries will be sent via POST to
https://www.example.com/api/v1/log.
Once your server is ready to accept requests you can use the logger thusly:
export default Ember.Component.extend({
remoteLogger: Ember.inject.service(),
actions: {
coolAction() {
remoteLogger.debug('Sweet log entry', ['OPTIONAL', 'TAGS']);
}
}
});This results in a log entry that looks like this:
[DEBUG][OPTIONAL][TAGS] Sweet log entry
There are three more log levels in addition to debug: info, warn, and
error.
The log methods return a promise and resolve/reject according to whether an ok response was received from the server or not. I'm not sure that I would recommend waiting for log requests to resolve from a UX point of view, but it's there in case you need it.
Every part of the logging endpoint url is individually customizable (or you can
override the whole URL itself). Simply extend the remote-logger service and
override any of the following properties to achieve the desired effect. The
url property, if left alone, is dynamically constructed thusly:
{host}/{namespace}/{pathPrefix}
These properties, except for pathPrefix which defaults to "log", will be
inferred from your application adapter. If any property is absent the url will
still be constructed properly. For example, if host is absent but namespace
is present, the url may look something like /api/v1/log. Or if namespace is
absent but everything else is present then the url may look something like
https://www.example.com/log.
As stated before, the following properties can be altered like so:
import RemoteLogger from 'ember-cli-remote-logger/services/remote-logger';
export default RemoteLogger.extend({
host: 'https://www.example.com',
namespace: 'api',
pathPrefix: 'log-entries'
});
// or
export default RemoteLogger.extend({
url: 'https://www.example.com/api/log-entries'
});Headers are also customizable. The are inferred by your application adapter but
can be overridden in the same way as above. The headers property may be a
computed property and should be a POJO. The only thing that you can't change
about headers is Content-Type, which will always be text/plain even if
you set that.
You can opt-in to this feature by setting useDifferentEndpoints to true.
This will construct URLs the same as above but will append the log level to the
url:
{host}/{namespace}/{pathPrefix}/{logLevel}
fetch requires a full URL, including the protocol. This means you need to
either define the
url
property on your application adapter or override the url property on the
remote-logger service:
import RemoteLogger from 'ember-cli-remote-logger/services/remote-logger';
export default RemoteLogger.extend({
url: 'https://www.example.com/sweet/url'
});