logPolicy.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // Licensed under the MIT License. See License.txt in the project root for license information.
  3. import { HttpOperationResponse } from "../httpOperationResponse";
  4. import { WebResource } from "../webResource";
  5. import { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from "./requestPolicy";
  6. export function logPolicy(logger: any = console.log): RequestPolicyFactory {
  7. return {
  8. create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {
  9. return new LogPolicy(nextPolicy, options, logger);
  10. }
  11. };
  12. }
  13. export class LogPolicy extends BaseRequestPolicy {
  14. logger?: any;
  15. constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, logger: any = console.log) {
  16. super(nextPolicy, options);
  17. this.logger = logger;
  18. }
  19. public sendRequest(request: WebResource): Promise<HttpOperationResponse> {
  20. return this._nextPolicy.sendRequest(request).then(response => logResponse(this, response));
  21. }
  22. }
  23. function logResponse(policy: LogPolicy, response: HttpOperationResponse): Promise<HttpOperationResponse> {
  24. policy.logger(`>> Request: ${JSON.stringify(response.request, undefined, 2)}`);
  25. policy.logger(`>> Response status code: ${response.status}`);
  26. const responseBody = response.bodyAsText;
  27. policy.logger(`>> Body: ${responseBody}`);
  28. return Promise.resolve(response);
  29. }