From b596d0febdb3f6527f3acdb501d33dba6fe602dc Mon Sep 17 00:00:00 2001 From: Hao Zhang Date: Fri, 19 Nov 2021 12:21:16 +0800 Subject: [PATCH] fix(logs): extra CRs in downloading container logs EE-1973 (#6041) --- app/constants.js | 2 ++ app/docker/components/log-viewer/logViewerController.js | 4 +++- app/docker/helpers/logHelper.js | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/constants.js b/app/constants.js index 7c45f2d61..1e59c455c 100644 --- a/app/constants.js +++ b/app/constants.js @@ -32,3 +32,5 @@ angular export const PORTAINER_FADEOUT = 1500; export const STACK_NAME_VALIDATION_REGEX = '^[-_a-z0-9]+$'; export const TEMPLATE_NAME_VALIDATION_REGEX = '^[-_a-z0-9]+$'; +export const BROWSER_OS_PLATFORM = navigator.userAgent.indexOf('Windows NT') > -1 ? 'win' : 'lin'; +export const NEW_LINE_BREAKER = BROWSER_OS_PLATFORM === 'win' ? '\r\n' : '\n'; diff --git a/app/docker/components/log-viewer/logViewerController.js b/app/docker/components/log-viewer/logViewerController.js index 5b797d630..93fa811c5 100644 --- a/app/docker/components/log-viewer/logViewerController.js +++ b/app/docker/components/log-viewer/logViewerController.js @@ -1,5 +1,6 @@ import moment from 'moment'; import _ from 'lodash-es'; +import { NEW_LINE_BREAKER } from '@/constants'; angular.module('portainer.docker').controller('LogViewerController', [ 'clipboard', @@ -48,7 +49,8 @@ angular.module('portainer.docker').controller('LogViewerController', [ }; this.downloadLogs = function () { - const data = new Blob([_.reduce(this.state.filteredLogs, (acc, log) => acc + '\n' + log.line, '')]); + // To make the feature of downloading container logs working both on Windows and Linux, we need to use correct new line breakers on corresponding OS. + const data = new Blob([_.reduce(this.state.filteredLogs, (acc, log) => acc + log.line + NEW_LINE_BREAKER, '')]); FileSaver.saveAs(data, this.resourceName + '_logs.txt'); }; }, diff --git a/app/docker/helpers/logHelper.js b/app/docker/helpers/logHelper.js index e53d9046d..0c939c011 100644 --- a/app/docker/helpers/logHelper.js +++ b/app/docker/helpers/logHelper.js @@ -46,7 +46,7 @@ angular.module('portainer.docker').factory('LogHelper', [ function stripHeaders(logs) { logs = logs.substring(8); - logs = logs.replace(/\n(.{8})/g, '\n\r'); + logs = logs.replace(/\r?\n(.{8})/g, '\n'); return logs; }