Skip to content

Commit 2d1b888

Browse files
committed
‼️ BREAKING:[#10]Create log files feature (v2.0.0)
1 parent c8b78fc commit 2d1b888

File tree

11 files changed

+122
-59
lines changed

11 files changed

+122
-59
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@
66

77
## 1.0.1 /2023-02/28
88
- Added new color
9-
- Updated Documentation
9+
- Updated Documentation
10+
11+
## 2.0.0 /2023-03-08
12+
- Added log file capabilities
13+
- Removed unnecessary express dependency

README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,37 @@ app.listen('3001', () => {
221221
222222
<br>
223223

224+
# Save my logs🚀
225+
Using this feature you can store you apps log in a file.\
226+
This feature is useful for debugging and for production.
227+
228+
<br>
229+
230+
## 📑Borgen logs 🐾
231+
**logs** argument allows you to specify a path where your log file will be located.
232+
```js
233+
app.use(
234+
Borgen({
235+
logs: '../logs/borgen.log'
236+
})
237+
);
238+
```
239+
## 📑Logger logs 🐾
240+
To save your logs you need to add the **logs** parameter as an argument.
241+
242+
```js
243+
Logger.info({ logs: '../logs/info.log' });
244+
Logger.warn({ logs: '../logs/warnings.log' });
245+
Logger.error({ logs: '../logs/error.log' });
246+
```
247+
248+
> \
249+
> **Note:** The 🔖log file name can be any custom name. ' ./custom_name.log '
250+
> ___
251+
252+
<br>
253+
<br>
254+
224255
## 💪🏽 Thanks to all the awesome Contributors
225256

226257
Thanks a lot for spending your time helping Borgen grow. Thanks a lot! Keep rocking🍻

example.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
const express = require('express');
2-
32
const { Logger, Borgen } = require('borgen');
43

54
const app = express();
@@ -15,20 +14,21 @@ app.use(
1514
routeColor: 'gray',
1615
statusColor: 'cyan',
1716
resTimeColor: 'gray',
18-
statusCodesCl: { serverErr: 'red', clientErr: 'yellow', redirects: 'cyan', success: 'greenBright' }
17+
statusCodesCl: { serverErr: 'red', clientErr: 'yellow', redirects: 'cyan', success: 'greenBright' },
18+
logs: './logs/borgen.log'
1919
})
2020
);
2121

2222
app.get('/test', (req, res) => {
23-
Logger.warn({ message: 'This is an warning', infoColor: 'yellow', messageColor: 'yellowBright' });
23+
Logger.warn({ message: 'This is an warning', infoColor: 'yellow', messageColor: 'yellowBright', logs: './logs/warnings.log' });
2424
res.send('Hello world').end();
2525
});
2626

2727
app.get('*', (req, res) => {
28-
Logger.error({ message: 'This route does not exist', infoColor: 'red', messageColor: 'redBright' });
28+
Logger.error({ message: 'This route does not exist', infoColor: 'red', messageColor: 'redBright', logs: './logs/error.log' });
2929
res.send('404 not found');
3030
});
3131

3232
app.listen('3001', () => {
33-
Logger.info({ message: 'The server is running on port ' });
33+
Logger.info({ message: 'The server is running on port ', logs: './logs/info.log' });
3434
});

example.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
1-
import express from 'express'
2-
import { Logger,Borgen } from 'borgen';
1+
import express from 'express';
2+
import { Logger, Borgen } from './src/index';
33

44
const app = express();
55
app.use(
66
Borgen({
7-
methodColor:{
8-
GET:'greenBright',
9-
POST:'yellow',
10-
PUT:'gray',
11-
PATCH:'gray',
12-
DELETE:'redBright'
7+
methodColor: {
8+
GET: 'greenBright',
9+
POST: 'yellow',
10+
PUT: 'gray',
11+
PATCH: 'gray',
12+
DELETE: 'redBright'
1313
},
14-
routeColor:'gray',
15-
statusColor:'cyan',
16-
resTimeColor:'gray',
17-
statusCodesCl:{serverErr:'red', clientErr:'yellow', redirects:'cyan',success:'greenBright'
18-
}})
14+
routeColor: 'gray',
15+
statusColor: 'cyan',
16+
resTimeColor: 'gray',
17+
statusCodesCl: { serverErr: 'red', clientErr: 'yellow', redirects: 'cyan', success: 'greenBright' },
18+
logs: '../logs/borgen.log'
19+
})
1920
);
2021

2122
app.get('/test', (req, res) => {
22-
Logger.warn({ message: 'This is an warning', infoColor: 'yellow', messageColor: 'yellowBright' });
23+
Logger.warn({ message: 'This is an warning', infoColor: 'yellow', messageColor: 'yellowBright', logs: '../logs/warnings.log' });
2324
res.send('Hello world').end();
2425
});
2526

2627
app.get('*', (req, res) => {
27-
Logger.error({ message: 'This route does not exist', infoColor: 'red', messageColor: 'redBright' });
28+
Logger.error({ message: 'This route does not exist', infoColor: 'red', messageColor: 'redBright', logs: '../logs/error.log' });
2829
res.send('404 not found');
2930
});
3031

3132
app.listen('3001', () => {
32-
Logger.info({ message: 'The server is running on port '});
33+
Logger.info({ message: 'The server is running on port ', logs: '../logs/info.log' });
3334
});

logs/borgen.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[3/8/2023, 2:59:32 PM] GET Request path: /test - Status:304 in 7 ms
2+
[3/8/2023, 3:00:06 PM] GET Request path: /test - Status:304 in 1 ms

logs/info.log

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[3/8/2023, 2:59:13 PM] [INFO] The server is running on port

logs/warnings.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[3/8/2023, 2:59:32 PM] [INFO] This is an warning
2+
[3/8/2023, 3:00:06 PM] [INFO] This is an warning

package-lock.json

Lines changed: 11 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "borgen",
3-
"version": "1.0.1",
3+
"version": "2.0.0",
44
"contributors": [
55
"Abel Misiocha <abel@abeldev.site>"
66
],
@@ -40,12 +40,9 @@
4040
},
4141
"homepage": "https://codedwells.github.io/Borgen",
4242
"devDependencies": {
43-
"@types/express": "^4.17.17",
4443
"typescript": "^4.9.5"
4544
},
4645
"dependencies": {
47-
"borgen": "^1.0.1",
48-
"chalk": "^4.1.2",
49-
"express": "^4.18.2"
46+
"chalk": "^4.1.2"
5047
}
5148
}

src/index.ts

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
* MIT Licensed
77
*/
88

9-
import { Request, Response, NextFunction } from 'express';
109
import chalk from 'chalk';
10+
import fs from 'fs';
1111

1212
type colorTypes =
1313
| 'black'
@@ -33,6 +33,7 @@ type loggerParams = {
3333
message: string;
3434
infoColor?: colorTypes;
3535
messageColor?: colorTypes;
36+
logs?: string;
3637
};
3738

3839
type statusCodeType = {
@@ -56,6 +57,7 @@ type BorgenParams = {
5657
statusColor?: colorTypes;
5758
resTimeColor?: colorTypes;
5859
statusCodesCl?: statusCodeType;
60+
logs?: string;
5961
};
6062

6163
export class Logger {
@@ -66,15 +68,21 @@ export class Logger {
6668
* @param message The message you want logged `This is an informational message`
6769
* @example
6870
* ```js
69-
* Logger.error({message:'This is an info message',infoColor:'blue',messageColor:'cyan'});
71+
* Logger.error({message:'This is an info message',infoColor:'blue',messageColor:'cyan',logs:'../logs/info.log'});
7072
*
7173
* [2/27/2023, 3:57:45 PM] [INFO] Server is listening on port:3001
7274
* ```
7375
*/
74-
public static info = ({ message, infoColor, messageColor }: loggerParams) => {
76+
public static info = ({ message, infoColor, messageColor, logs }: loggerParams) => {
7577
const infoCl = infoColor || 'blue';
7678
const messageCl = messageColor || 'blueBright';
7779

80+
if (logs) {
81+
const output = fs.createWriteStream(logs, { encoding: 'utf8', flags: 'a' });
82+
83+
output.write(`[${new Date().toLocaleString()}] [INFO] ${message || 'Default info message'}\n`);
84+
}
85+
7886
console.log(chalk[infoCl](`[${new Date().toLocaleString()}] [INFO]`), chalk[messageCl](message || 'Default info message'));
7987
};
8088

@@ -85,16 +93,22 @@ export class Logger {
8593
* @param message The message you want logged `This is a warning`
8694
* @example
8795
* ```js
88-
* Logger.warn({message:'This is an warning',infoColor:'yellow',messageColor:'yellowBright'});
96+
* Logger.warn({message:'This is an warning',infoColor:'yellow',messageColor:'yellowBright',logs:'../logs/warns.log'});
8997
*
9098
* [2/27/2023, 3:57:48 PM] [ERROR] This is a warning
9199
* ```
92100
*/
93-
public static warn = ({ message, infoColor, messageColor }: loggerParams) => {
101+
public static warn = ({ message, infoColor, messageColor, logs }: loggerParams) => {
94102
const infoCl = infoColor || 'yellow';
95103
const messageCl = messageColor || 'yellowBright';
96104

97-
console.log(chalk[infoCl].bold(`[${new Date().toLocaleString()}] [WARN]`), chalk[messageCl](message));
105+
if (logs) {
106+
const output = fs.createWriteStream(logs, { encoding: 'utf8', flags: 'a' });
107+
108+
output.write(`[${new Date().toLocaleString()}] [INFO] ${message || 'Default warn message'}\n`);
109+
}
110+
111+
console.log(chalk[infoCl].bold(`[${new Date().toLocaleString()}] [WARN]`), chalk[messageCl](message || 'Default warn message'));
98112
};
99113

100114
/**
@@ -104,16 +118,22 @@ export class Logger {
104118
* @param message The message you want logged `This is an error message`
105119
* @example
106120
* ```js
107-
* Logger.error({message:'This is an error message',infoColor:'red',messageColor:'redBright'});
121+
* Logger.error({message:'This is an error message',infoColor:'red',messageColor:'redBright',logs:'../logs/error.log'});
108122
*
109123
* [2/27/2023, 3:57:48 PM] [ERROR] This is route does not exist
110124
* ```
111125
*/
112-
public static error = ({ message, infoColor, messageColor }: loggerParams) => {
126+
public static error = ({ message, infoColor, messageColor, logs }: loggerParams) => {
113127
const infoCl = infoColor || 'red';
114128
const messageCl = messageColor || 'redBright';
115129

116-
console.log(chalk[infoCl].bold(`[${new Date().toLocaleString()}] [ERROR]`), chalk[messageCl](message));
130+
if (logs) {
131+
const output = fs.createWriteStream(logs, { encoding: 'utf8', flags: 'a' });
132+
133+
output.write(`[${new Date().toLocaleString()}] [INFO] ${message || 'Default error message'}\n`);
134+
}
135+
136+
console.log(chalk[infoCl].bold(`[${new Date().toLocaleString()}] [ERROR]`), chalk[messageCl](message || 'Default error message'));
117137
};
118138
}
119139

@@ -137,15 +157,16 @@ export class Logger {
137157
* routeColor:'gray',
138158
* statusColor:'cyan',
139159
* resTimeColor:'gray',
140-
* statusCodesCl:{serverErr:'red', clientErr:'yellow', redirects:'cyan',success:'greenBright'
141-
* }})
160+
* statusCodesCl:{serverErr:'red', clientErr:'yellow', redirects:'cyan',success:'greenBright'},
161+
* logs:'../logs/borgen.log',
162+
* })
142163
* ```
143164
* @example
144165
* ```js
145166
* [POST] Request path: /api/v1/users/new - Status:200 in 5 ms
146167
* ```
147168
*/
148-
export const Borgen = ({ methodColor, routeColor, statusColor, resTimeColor, statusCodesCl }: BorgenParams) => {
169+
export const Borgen = ({ methodColor, routeColor, statusColor, resTimeColor, statusCodesCl, logs }: BorgenParams) => {
149170
const { serverErr, clientErr, redirects, success } = {
150171
serverErr: statusCodesCl?.serverErr || 'red',
151172
clientErr: statusCodesCl?.clientErr || 'yellow',
@@ -164,10 +185,18 @@ export const Borgen = ({ methodColor, routeColor, statusColor, resTimeColor, sta
164185
const statusCl = statusColor || 'cyan';
165186
const resTimeCl = resTimeColor || 'gray';
166187

167-
return (req: Request, res: Response, next: NextFunction) => {
188+
//@ts-ignore
189+
return (req, res, next) => {
168190
const start = Date.now();
169-
const reqColor = res.on('finish', () => {
191+
res.on('finish', () => {
170192
const elapsed = Date.now() - start;
193+
194+
if (logs) {
195+
const output = fs.createWriteStream(logs, { encoding: 'utf8', flags: 'a' });
196+
197+
output.write(`[${new Date().toLocaleString()}] ${req.method} Request path: ${req.path} - Status:${res.statusCode} in ${elapsed} ms\n`);
198+
}
199+
171200
console.log(
172201
chalk[req.method === 'GET' ? GET : req.method === 'POST' ? POST : req.method === 'PUT' ? PUT : req.method === 'PATCH' ? PATCH : req.method === 'DELETE' ? DELETE : 'greenBright'](
173202
`[${req.method}] Request`
@@ -186,7 +215,6 @@ export const Borgen = ({ methodColor, routeColor, statusColor, resTimeColor, sta
186215
chalk[resTimeCl].bold(`in ${elapsed} ms`)
187216
);
188217
});
189-
190218
next();
191219
};
192220
};

0 commit comments

Comments
 (0)