Skip to content

Commit 199baec

Browse files
fix: respect logLevel and logProvider option for proxy (#3257)
1 parent 10e089b commit 199baec

File tree

2 files changed

+224
-4
lines changed

2 files changed

+224
-4
lines changed

lib/Server.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,15 @@ class Server {
220220
const configWithDevServer =
221221
configs.find((config) => config.devServer) || configs[0];
222222

223-
proxyOptions.logLevel = getLogLevelForProxy(
224-
configWithDevServer.infrastructureLogging.level
225-
);
226-
proxyOptions.logProvider = () => this.logger;
223+
if (typeof proxyOptions.logLevel === 'undefined') {
224+
proxyOptions.logLevel = getLogLevelForProxy(
225+
configWithDevServer.infrastructureLogging.level
226+
);
227+
}
228+
229+
if (typeof proxyOptions.logProvider === 'undefined') {
230+
proxyOptions.logProvider = () => this.logger;
231+
}
227232

228233
return proxyOptions;
229234
});

test/server/proxy-option.test.js

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ describe('proxy option', () => {
305305
let responseMessage;
306306

307307
const transportModes = ['sockjs', 'ws'];
308+
308309
transportModes.forEach((transportMode) => {
309310
describe(`with transportMode: ${transportMode}`, () => {
310311
beforeAll((done) => {
@@ -512,4 +513,218 @@ describe('proxy option', () => {
512513
req.get('/proxy1').expect(200, 'from proxy1', done);
513514
});
514515
});
516+
517+
describe('should work and respect `logProvider` and `logLevel` options', () => {
518+
let server;
519+
let req;
520+
let closeProxyServers;
521+
let customLogProvider;
522+
523+
beforeAll((done) => {
524+
customLogProvider = {
525+
log: jest.fn(),
526+
debug: jest.fn(),
527+
info: jest.fn(),
528+
warn: jest.fn(),
529+
error: jest.fn(),
530+
};
531+
532+
closeProxyServers = startProxyServers();
533+
server = testServer.start(
534+
config,
535+
{
536+
static: {
537+
directory: contentBase,
538+
watch: false,
539+
},
540+
proxy: {
541+
'/my-path': {
542+
target: 'http://unknown:1234',
543+
logProvider: () => customLogProvider,
544+
logLevel: 'error',
545+
},
546+
},
547+
port: port3,
548+
},
549+
done
550+
);
551+
req = request(server.app);
552+
});
553+
554+
afterAll((done) => {
555+
testServer.close(() => {
556+
closeProxyServers(done);
557+
});
558+
});
559+
560+
describe('target', () => {
561+
it('respects a proxy option when a request path is matched', (done) => {
562+
req.get('/my-path').expect(504, () => {
563+
expect(customLogProvider.error).toHaveBeenCalledTimes(1);
564+
565+
done();
566+
});
567+
});
568+
});
569+
});
570+
571+
describe('should work and respect the `logLevel` option with `silent` value', () => {
572+
let server;
573+
let req;
574+
let closeProxyServers;
575+
let customLogProvider;
576+
577+
beforeAll((done) => {
578+
customLogProvider = {
579+
log: jest.fn(),
580+
debug: jest.fn(),
581+
info: jest.fn(),
582+
warn: jest.fn(),
583+
error: jest.fn(),
584+
};
585+
586+
closeProxyServers = startProxyServers();
587+
server = testServer.start(
588+
config,
589+
{
590+
static: {
591+
directory: contentBase,
592+
watch: false,
593+
},
594+
proxy: {
595+
'/my-path': {
596+
target: 'http://unknown:1234',
597+
logProvider: () => customLogProvider,
598+
logLevel: 'silent',
599+
},
600+
},
601+
port: port3,
602+
},
603+
done
604+
);
605+
req = request(server.app);
606+
});
607+
608+
afterAll((done) => {
609+
testServer.close(() => {
610+
closeProxyServers(done);
611+
});
612+
});
613+
614+
describe('target', () => {
615+
it('respects a proxy option when a request path is matched', (done) => {
616+
req.get('/my-path').expect(504, () => {
617+
expect(customLogProvider.error).toHaveBeenCalledTimes(0);
618+
619+
done();
620+
});
621+
});
622+
});
623+
});
624+
625+
describe('should work and respect the `infrastructureLogging.level` option', () => {
626+
let server;
627+
let req;
628+
let closeProxyServers;
629+
let customLogProvider;
630+
631+
beforeAll((done) => {
632+
customLogProvider = {
633+
log: jest.fn(),
634+
debug: jest.fn(),
635+
info: jest.fn(),
636+
warn: jest.fn(),
637+
error: jest.fn(),
638+
};
639+
640+
closeProxyServers = startProxyServers();
641+
server = testServer.start(
642+
{ ...config, infrastructureLogging: { level: 'error' } },
643+
{
644+
static: {
645+
directory: contentBase,
646+
watch: false,
647+
},
648+
proxy: {
649+
'/my-path': {
650+
target: 'http://unknown:1234',
651+
logProvider: () => customLogProvider,
652+
},
653+
},
654+
port: port3,
655+
},
656+
done
657+
);
658+
req = request(server.app);
659+
});
660+
661+
afterAll((done) => {
662+
testServer.close(() => {
663+
closeProxyServers(done);
664+
});
665+
});
666+
667+
describe('target', () => {
668+
it('respects a proxy option when a request path is matched', (done) => {
669+
req.get('/my-path').expect(504, () => {
670+
expect(customLogProvider.error).toHaveBeenCalledTimes(1);
671+
672+
done();
673+
});
674+
});
675+
});
676+
});
677+
678+
describe('should work and respect the `infrastructureLogging.level` option with `none` value', () => {
679+
let server;
680+
let req;
681+
let closeProxyServers;
682+
let customLogProvider;
683+
684+
beforeAll((done) => {
685+
customLogProvider = {
686+
log: jest.fn(),
687+
debug: jest.fn(),
688+
info: jest.fn(),
689+
warn: jest.fn(),
690+
error: jest.fn(),
691+
};
692+
693+
closeProxyServers = startProxyServers();
694+
server = testServer.start(
695+
{ ...config, infrastructureLogging: { level: 'none' } },
696+
{
697+
static: {
698+
directory: contentBase,
699+
watch: false,
700+
},
701+
proxy: {
702+
'/my-path': {
703+
target: 'http://unknown:1234',
704+
logProvider: () => customLogProvider,
705+
},
706+
},
707+
port: port3,
708+
},
709+
done
710+
);
711+
req = request(server.app);
712+
});
713+
714+
afterAll((done) => {
715+
testServer.close(() => {
716+
closeProxyServers(done);
717+
});
718+
});
719+
720+
describe('target', () => {
721+
it('respects a proxy option when a request path is matched', (done) => {
722+
req.get('/my-path').expect(504, () => {
723+
expect(customLogProvider.error).toHaveBeenCalledTimes(0);
724+
725+
done();
726+
});
727+
});
728+
});
729+
});
515730
});

0 commit comments

Comments
 (0)