Skip to content

Commit bf8c8de

Browse files
authored
Merge pull request #61 from ong-gtp/dev
Adapt logging to Heroku's logging technique
2 parents a6bc97f + b20178c commit bf8c8de

File tree

4 files changed

+40
-23
lines changed

4 files changed

+40
-23
lines changed

.env.docker

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ DB_PASSWORD=secret
1212

1313
# Log
1414
LOGGING_LEVEL=debug
15+
LOG_FILE_GENERATION_SUPPORT=false
1516

1617
# Authentication
1718
ACCESS_TOKEN_DURATION=10m

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ DB_PASSWORD=
1212

1313
# Log
1414
LOGGING_LEVEL=debug
15+
LOG_FILE_GENERATION_SUPPORT=false
1516

1617
# Authentication
1718
ACCESS_TOKEN_DURATION=10m

src/config/config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ export default {
3131
level: process.env.LOGGING_LEVEL || 'info',
3232
maxSize: process.env.LOGGING_MAX_SIZE || '20m',
3333
maxFiles: process.env.LOGGING_MAX_FILES || '7d',
34-
datePattern: process.env.LOGGING_DATE_PATTERN || 'YYYY-MM-DD'
34+
datePattern: process.env.LOGGING_DATE_PATTERN || 'YYYY-MM-DD',
35+
logFileGenarationSupport: process.env.LOG_FILE_GENERATION_SUPPORT || 'true'
3536
},
3637
db: {
3738
client: process.env.DB_CLIENT,

src/utils/logger.ts

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import fs from 'fs';
22
import DailyRotateFile from 'winston-daily-rotate-file';
3-
import { createLogger, format, transports } from 'winston';
3+
import { createLogger, format, transports, Logger } from 'winston';
44

55
import context from './context';
66
import app from '../config/config';
@@ -29,29 +29,43 @@ const formatter = printf((info: any) => {
2929
return `[ ${ts} ] [ ${transactionId} ] - [ ${level} ] ${message} ${meta}`;
3030
});
3131

32-
if (!fs.existsSync('logs')) {
33-
fs.mkdirSync('logs');
34-
}
35-
3632
let trans: any = [];
33+
let logger: Logger;
3734

38-
if (environment === 'development') {
39-
trans = [new transports.Console()];
40-
}
35+
/*
36+
Send logs to console if log file generation is not supported.
37+
Heroku is an example cloud service provider that uses plug-ins to monitor logs
38+
and logs are sent to console. Accessing the log files generated by the app poses a difficult task.
39+
*/
40+
if (logging.logFileGenarationSupport === 'false') {
41+
logger = createLogger({
42+
level: logging.level,
43+
format: combine(splat(), colorize(), timestamp(), formatter),
44+
transports: [new transports.Console()]
45+
});
46+
} else {
47+
if (!fs.existsSync('logs')) {
48+
fs.mkdirSync('logs');
49+
}
4150

42-
const logger = createLogger({
43-
level: logging.level,
44-
format: combine(splat(), colorize(), timestamp(), formatter),
45-
transports: [
46-
...trans,
47-
new DailyRotateFile({
48-
maxSize: logging.maxSize,
49-
maxFiles: logging.maxFiles,
50-
datePattern: logging.datePattern,
51-
zippedArchive: true,
52-
filename: `logs/${logging.level}-%DATE%.log`
53-
})
54-
]
55-
});
51+
if (environment === 'development') {
52+
trans = [new transports.Console()];
53+
}
54+
55+
logger = createLogger({
56+
level: logging.level,
57+
format: combine(splat(), colorize(), timestamp(), formatter),
58+
transports: [
59+
...trans,
60+
new DailyRotateFile({
61+
maxSize: logging.maxSize,
62+
maxFiles: logging.maxFiles,
63+
datePattern: logging.datePattern,
64+
zippedArchive: true,
65+
filename: `logs/${logging.level}-%DATE%.log`
66+
})
67+
]
68+
});
69+
}
5670

5771
export default logger;

0 commit comments

Comments
 (0)