Skip to content

Commit e5e439e

Browse files
committed
feat: support for log level
BREAKING CHANGE: now we can move to v1.0.0!
1 parent ebcb759 commit e5e439e

File tree

6 files changed

+66
-8
lines changed

6 files changed

+66
-8
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ const webpackConfig = {
4343
serviceVersion: 'SERVICE_VERSION',
4444
serverURL: 'https://ELASTIC_APM_SERVER_URL',
4545
publicPath: PUBLIC_PATH,
46-
secret: 'SECRET'
46+
secret: 'SECRET',
47+
logLevel: 'debug'
4748
})
4849
]
4950
};
@@ -73,6 +74,10 @@ Required. The base path for the assets.
7374

7475
Optional. The secret token for uploading sourcemaps. This field is required if the APM server needs it.
7576

77+
#### logLevel?: 'info' | 'warn' | 'error' | 'trace' | 'debug' | 'silent'
78+
79+
Optional. Default to `'warn'`. Level of the messages that `ElasticAPMSourceMapPlugin` will log.
80+
7681
## License
7782

7883
[MIT](/LICENSE.md)

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@
132132
"shelljs": "^0.8.3",
133133
"typedoc": "^0.14.2",
134134
"typescript": "^3.0.3",
135-
"webpack": "^4.29.5"
135+
"webpack": "^4.29.5",
136+
"webpack-log": "^2.0.0"
136137
},
137138
"peerDependencies": {
138139
"webpack": "^4.0.0"

src/elastic-apm-sourcemap-webpack-plugin.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import * as R from 'ramda';
22
import fetch from 'node-fetch';
33
import FormData from 'form-data';
44
import webpack from 'webpack';
5+
import webpackLog, { Level } from 'webpack-log';
56

67
export interface Config {
78
serviceName: string;
89
serviceVersion: string;
910
publicPath: string;
1011
serverURL: string;
1112
secret?: string;
13+
logLevel?: Level;
1214
}
1315

1416
export default class ElasticAPMSourceMapPlugin implements webpack.Plugin {
@@ -18,11 +20,24 @@ export default class ElasticAPMSourceMapPlugin implements webpack.Plugin {
1820
}
1921

2022
apply(compiler: webpack.Compiler): void {
23+
const logger = webpackLog({
24+
name: 'ElasticAPMSourceMapPlugin',
25+
level: this.config.logLevel || 'warn'
26+
});
27+
2128
compiler.hooks.afterEmit.tapPromise('ElasticAPMSourceMapPlugin', compilation => {
29+
logger.debug(`starting uploading sourcemaps with configs: ${JSON.stringify(this.config)}.`);
30+
2231
const { chunks } = compilation.getStats().toJson();
2332

2433
return R.compose(
25-
(promises: Array<Promise<void>>) => Promise.all(promises),
34+
(promises: Array<Promise<void>>) =>
35+
Promise.all(promises)
36+
.then(() => logger.debug('finished uploading sourcemaps.'))
37+
.catch(err => {
38+
logger.error(err);
39+
throw err;
40+
}),
2641
R.map(({ sourceFile, sourceMap }) => {
2742
const formData = new FormData();
2843
formData.append('sourcemap', compilation.assets[sourceMap].source());
@@ -42,11 +57,13 @@ export default class ElasticAPMSourceMapPlugin implements webpack.Plugin {
4257
.then(response => {
4358
if (response.ok) return response.json();
4459
else {
45-
throw new Error(`Error while uploading ${sourceMap} to Elastic APM`);
60+
const errMessage = `Error while uploading ${sourceMap} to Elastic APM`;
61+
logger.error(errMessage);
62+
throw new Error(errMessage);
4663
}
4764
})
4865
.then(() => {
49-
console.info(`Uploaded ${sourceMap} to Elastic APM`); // eslint-disable-line no-console
66+
logger.debug(`uploaded ${sourceMap} to Elastic APM.`);
5067
});
5168
}),
5269
R.map(({ files }) => {

src/types/webpack-log.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
declare module 'webpack-log' {
2+
export interface Logger {
3+
info: (value?: any) => void;
4+
warn: (value?: any) => void;
5+
error: (value?: any) => void;
6+
trace: (value?: any) => void;
7+
debug: (value?: any) => void;
8+
silent: (value?: any) => void;
9+
}
10+
11+
export type Level = 'info' | 'warn' | 'error' | 'trace' | 'debug' | 'silent';
12+
13+
export default function(options: {
14+
name: string;
15+
level?: Level;
16+
unique?: boolean;
17+
timestamp?: boolean;
18+
}): Logger;
19+
}

test/integration.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ test('failed', cb => {
5555
serviceName: 'mock-service',
5656
serviceVersion: 'mock-version',
5757
publicPath: '/mock-folder',
58-
serverURL: 'mock-url'
58+
serverURL: 'mock-url',
59+
logLevel: 'silent'
5960
}),
6061
err => {
6162
expect(fetch.mock.calls.length).toEqual(1);
@@ -75,7 +76,8 @@ test('400', cb => {
7576
serviceName: 'mock-service',
7677
serviceVersion: 'mock-version',
7778
publicPath: '/mock-folder',
78-
serverURL: 'mock-url'
79+
serverURL: 'mock-url',
80+
logLevel: 'silent'
7981
}),
8082
err => {
8183
expect(fetch.mock.calls.length).toEqual(1);
@@ -96,7 +98,8 @@ test('with secret', cb => {
9698
serviceVersion: 'mock-version',
9799
publicPath: '/mock-folder',
98100
serverURL: 'mock-url',
99-
secret: 'mock-secret'
101+
secret: 'mock-secret',
102+
logLevel: 'silent'
100103
}),
101104
() => {
102105
expect(fetch.mock.calls[0][1].headers).toEqual({ Authorization: 'Bearer mock-secret' });

yarn.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,6 +1376,11 @@ ansi-align@^2.0.0:
13761376
dependencies:
13771377
string-width "^2.0.0"
13781378

1379+
ansi-colors@^3.0.0:
1380+
version "3.2.3"
1381+
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
1382+
integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
1383+
13791384
ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0:
13801385
version "3.2.0"
13811386
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
@@ -9305,6 +9310,14 @@ webidl-conversions@^4.0.2:
93059310
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
93069311
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
93079312

9313+
webpack-log@^2.0.0:
9314+
version "2.0.0"
9315+
resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
9316+
integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
9317+
dependencies:
9318+
ansi-colors "^3.0.0"
9319+
uuid "^3.3.2"
9320+
93089321
webpack-sources@^1.1.0, webpack-sources@^1.3.0:
93099322
version "1.3.0"
93109323
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"

0 commit comments

Comments
 (0)