Skip to content

Commit 3c56f2e

Browse files
committed
fix(log): output as many lines as possible if n > file lines
closes #221 - swap out slice-file dependency for `tail` and `read-last-lines` - make `ghost log` instance-aware
1 parent 57587a6 commit 3c56f2e

File tree

3 files changed

+83
-44
lines changed

3 files changed

+83
-44
lines changed

lib/commands/log.js

+16-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
'use strict';
22
const path = require('path');
33
const includes = require('lodash/includes');
4-
const sliceFile = require('slice-file');
4+
const lastLines = require('read-last-lines');
5+
const Tail = require('tail').Tail;
6+
const Promise = require('bluebird');
57
const PrettyStream = require('ghost-ignition/lib/logging/PrettyStream');
68

79
const errors = require('../errors');
810
const Command = require('../command');
911

1012
class LogCommand extends Command {
1113
run(argv) {
14+
if (!argv.name) {
15+
Command.checkValidInstall('log');
16+
}
17+
1218
let instance = this.system.getInstance(argv.name);
1319

1420
if (!instance) {
@@ -34,7 +40,6 @@ class LogCommand extends Command {
3440
}
3541

3642
let logFileName = path.join(process.cwd(), 'content/logs', `${instance.config.get('url').replace(/[^\w]/gi, '_')}_${this.system.environment}.log`);
37-
let slice = sliceFile(logFileName);
3843
let prettyStream = new PrettyStream();
3944

4045
prettyStream.on('error', (error) => {
@@ -45,17 +50,19 @@ class LogCommand extends Command {
4550

4651
prettyStream.pipe(this.ui.stdout);
4752

48-
if (argv.follow) {
49-
slice.follow(-argv.number).pipe(prettyStream);
50-
return;
51-
} else {
52-
slice.slice(-argv.number).pipe(prettyStream);
53-
}
53+
return lastLines.read(logFileName, argv.number).then((lines) => {
54+
lines.trim().split('\n').forEach(line => prettyStream.write(line));
55+
56+
if (argv.follow) {
57+
let tail = new Tail(logFileName);
58+
tail.on('line', (line) => prettyStream.write(line, 'utf8'));
59+
}
60+
});
5461
}
5562
}
5663

5764
LogCommand.description = 'View logs of a running Ghost process';
58-
LogCommand.params = '<name>';
65+
LogCommand.params = '[name]';
5966
LogCommand.options = {
6067
number: {
6168
alias: 'n',

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,13 @@
6060
"nginx-conf": "1.3.0",
6161
"ora": "1.3.0",
6262
"portfinder": "1.0.13",
63+
"read-last-lines": "1.2.0",
6364
"rxjs": "5.4.1",
6465
"semver": "5.3.0",
6566
"shasum": "1.0.2",
66-
"slice-file": "1.0.0",
6767
"strip-ansi": "4.0.0",
6868
"symlink-or-copy": "1.1.8",
69+
"tail": "1.2.2",
6970
"update-notifier": "2.2.0",
7071
"validator": "7.2.0",
7172
"yargs": "8.0.2",

yarn.lock

+65-34
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ ansi-styles@^2.2.1:
8080
version "2.2.1"
8181
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
8282

83+
any-promise@^1.0.0:
84+
version "1.3.0"
85+
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
86+
8387
aproba@^1.0.3:
8488
version "1.1.2"
8589
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1"
@@ -1219,6 +1223,25 @@ [email protected]:
12191223
jsonfile "^3.0.0"
12201224
universalify "^0.1.0"
12211225

1226+
fs-extra@^0.26.5:
1227+
version "0.26.7"
1228+
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9"
1229+
dependencies:
1230+
graceful-fs "^4.1.2"
1231+
jsonfile "^2.1.0"
1232+
klaw "^1.0.0"
1233+
path-is-absolute "^1.0.0"
1234+
rimraf "^2.2.8"
1235+
1236+
fs-promise@^0.5.0:
1237+
version "0.5.0"
1238+
resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-0.5.0.tgz#4347d6bf624655a7061a4319213c393276ad3ef3"
1239+
dependencies:
1240+
any-promise "^1.0.0"
1241+
fs-extra "^0.26.5"
1242+
mz "^2.3.1"
1243+
thenify-all "^1.6.0"
1244+
12221245
fs.realpath@^1.0.0:
12231246
version "1.0.0"
12241247
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -1434,7 +1457,7 @@ got@^7.0.0:
14341457
timed-out "^4.0.0"
14351458
url-parse-lax "^1.0.0"
14361459

1437-
graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
1460+
graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
14381461
version "4.1.11"
14391462
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
14401463

@@ -1621,10 +1644,6 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1,
16211644
version "2.0.3"
16221645
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
16231646

1624-
inherits@~1.0.0:
1625-
version "1.0.2"
1626-
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
1627-
16281647
ini@^1.3.0, ini@^1.3.4, ini@~1.3.0:
16291648
version "1.3.4"
16301649
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
@@ -1935,6 +1954,12 @@ [email protected]:
19351954
version "3.3.2"
19361955
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
19371956

1957+
jsonfile@^2.1.0:
1958+
version "2.4.0"
1959+
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
1960+
optionalDependencies:
1961+
graceful-fs "^4.1.6"
1962+
19381963
jsonfile@^3.0.0:
19391964
version "3.0.0"
19401965
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0"
@@ -1970,6 +1995,12 @@ kind-of@^4.0.0:
19701995
dependencies:
19711996
is-buffer "^1.1.5"
19721997

1998+
klaw@^1.0.0:
1999+
version "1.3.1"
2000+
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
2001+
optionalDependencies:
2002+
graceful-fs "^4.1.9"
2003+
19732004
19742005
version "2.0.16"
19752006
resolved "https://registry.yarnpkg.com/knex-migrator/-/knex-migrator-2.0.16.tgz#6ac051d4e0fb2a8b633f8aab8b4d0019ecd4dd65"
@@ -2426,6 +2457,14 @@ mysql@^2.11.1:
24262457
readable-stream "1.1.14"
24272458
sqlstring "2.2.0"
24282459

2460+
mz@^2.3.1:
2461+
version "2.6.0"
2462+
resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce"
2463+
dependencies:
2464+
any-promise "^1.0.0"
2465+
object-assign "^4.0.1"
2466+
thenify-all "^1.0.0"
2467+
24292468
nan@^2.3.3, nan@~2.4.0:
24302469
version "2.4.0"
24312470
resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
@@ -2904,6 +2943,12 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7:
29042943
minimist "^1.2.0"
29052944
strip-json-comments "~2.0.1"
29062945

2946+
2947+
version "1.2.0"
2948+
resolved "https://registry.yarnpkg.com/read-last-lines/-/read-last-lines-1.2.0.tgz#6970f68a2d5d03e1530b4b39373c00b941104890"
2949+
dependencies:
2950+
fs-promise "^0.5.0"
2951+
29072952
read-pkg-up@^2.0.0:
29082953
version "2.0.0"
29092954
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
@@ -2934,15 +2979,6 @@ [email protected], readable-stream@^1.1.12:
29342979
isarray "0.0.1"
29352980
string_decoder "~0.10.x"
29362981

2937-
"readable-stream@>=1.0.33-1 <1.1.0-0":
2938-
version "1.0.34"
2939-
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
2940-
dependencies:
2941-
core-util-is "~1.0.0"
2942-
inherits "~2.0.1"
2943-
isarray "0.0.1"
2944-
string_decoder "~0.10.x"
2945-
29462982
readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
29472983
version "2.3.1"
29482984
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.1.tgz#84e26965bb9e785535ed256e8d38e92c69f09d10"
@@ -3291,14 +3327,6 @@ [email protected]:
32913327
version "0.0.4"
32923328
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
32933329

3294-
3295-
version "1.0.0"
3296-
resolved "https://registry.yarnpkg.com/slice-file/-/slice-file-1.0.0.tgz#8b6c79d0a50c3fc3c1159957478426443a9000b8"
3297-
dependencies:
3298-
inherits "~1.0.0"
3299-
split2 "^0.2.1"
3300-
through2 "^0.6.5"
3301-
33023330
slide@^1.1.5:
33033331
version "1.1.6"
33043332
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -3351,12 +3379,6 @@ spdx-license-ids@^1.0.2:
33513379
version "1.2.2"
33523380
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
33533381

3354-
split2@^0.2.1:
3355-
version "0.2.1"
3356-
resolved "https://registry.yarnpkg.com/split2/-/split2-0.2.1.tgz#02ddac9adc03ec0bb78c1282ec079ca6e85ae900"
3357-
dependencies:
3358-
through2 "~0.6.1"
3359-
33603382
sprintf-js@~1.0.2:
33613383
version "1.0.3"
33623384
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -3492,6 +3514,10 @@ table@^4.0.1:
34923514
slice-ansi "0.0.4"
34933515
string-width "^2.0.0"
34943516

3517+
3518+
version "1.2.2"
3519+
resolved "https://registry.yarnpkg.com/tail/-/tail-1.2.2.tgz#3c40a47d53e137c541a14cc133532ecb2a75cc51"
3520+
34953521
tar-fs@^1.15.1:
34963522
version "1.15.3"
34973523
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.15.3.tgz#eccf935e941493d8151028e636e51ce4c3ca7f20"
@@ -3552,12 +3578,17 @@ text-table@~0.2.0:
35523578
version "0.2.0"
35533579
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
35543580

3555-
through2@^0.6.5, through2@~0.6.1:
3556-
version "0.6.5"
3557-
resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
3581+
thenify-all@^1.0.0, thenify-all@^1.6.0:
3582+
version "1.6.0"
3583+
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
3584+
dependencies:
3585+
thenify ">= 3.1.0 < 4"
3586+
3587+
"thenify@>= 3.1.0 < 4":
3588+
version "3.3.0"
3589+
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
35583590
dependencies:
3559-
readable-stream ">=1.0.33-1 <1.1.0-0"
3560-
xtend ">=4.0.0 <4.1.0-0"
3591+
any-promise "^1.0.0"
35613592

35623593
through2@^2.0.3:
35633594
version "2.0.3"
@@ -3820,7 +3851,7 @@ xdg-basedir@^3.0.0:
38203851
version "3.0.0"
38213852
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
38223853

3823-
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
3854+
xtend@^4.0.0, xtend@~4.0.1:
38243855
version "4.0.1"
38253856
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
38263857

0 commit comments

Comments
 (0)