@logdash/node 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changeset/README.md +8 -0
- package/.changeset/config.json +11 -0
- package/.editorconfig +13 -0
- package/.github/workflows/build-and-publish.yml +39 -0
- package/.github/workflows/ci.yml +36 -0
- package/.prettierignore +12 -0
- package/.prettierrc +12 -0
- package/CHANGELOG.md +146 -0
- package/LICENSE.md +21 -0
- package/README.md +81 -0
- package/dist/Logdash.d.ts +36 -0
- package/dist/Logdash.d.ts.map +1 -0
- package/dist/Logdash.js +145 -0
- package/dist/Logdash.js.map +1 -0
- package/dist/__tests__/HttpTransport.test.d.ts +2 -0
- package/dist/__tests__/HttpTransport.test.d.ts.map +1 -0
- package/dist/__tests__/HttpTransport.test.js +148 -0
- package/dist/__tests__/HttpTransport.test.js.map +1 -0
- package/dist/__tests__/Logdash.test.d.ts +2 -0
- package/dist/__tests__/Logdash.test.d.ts.map +1 -0
- package/dist/__tests__/Logdash.test.js +131 -0
- package/dist/__tests__/Logdash.test.js.map +1 -0
- package/dist/__tests__/RequestQueue.test.d.ts +2 -0
- package/dist/__tests__/RequestQueue.test.d.ts.map +1 -0
- package/dist/__tests__/RequestQueue.test.js +129 -0
- package/dist/__tests__/RequestQueue.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/internalLogger.d.ts +7 -0
- package/dist/logger/internalLogger.d.ts.map +1 -0
- package/dist/logger/internalLogger.js +17 -0
- package/dist/logger/internalLogger.js.map +1 -0
- package/dist/queue/RequestQueue.d.ts +24 -0
- package/dist/queue/RequestQueue.d.ts.map +1 -0
- package/dist/queue/RequestQueue.js +87 -0
- package/dist/queue/RequestQueue.js.map +1 -0
- package/dist/transport/HttpTransport.d.ts +28 -0
- package/dist/transport/HttpTransport.d.ts.map +1 -0
- package/dist/transport/HttpTransport.js +37 -0
- package/dist/transport/HttpTransport.js.map +1 -0
- package/dist/types/LogLevel.d.ts +10 -0
- package/dist/types/LogLevel.d.ts.map +1 -0
- package/dist/types/LogLevel.js +11 -0
- package/dist/types/LogLevel.js.map +1 -0
- package/docs/delta.png +0 -0
- package/docs/logs.png +0 -0
- package/package.json +49 -0
- package/test.ts +32 -0
- package/tsconfig.json +20 -0
- package/tsconfig.lib.json +29 -0
- package/vite.config.ts +8 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Changesets
|
|
2
|
+
|
|
3
|
+
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
|
|
4
|
+
with multi-package repos, or single-package repos to help you version and publish your code. You can
|
|
5
|
+
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
|
|
6
|
+
|
|
7
|
+
We have a quick list of common questions to get you started engaging with this project in
|
|
8
|
+
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://unpkg.com/@changesets/config@3.0.5/schema.json",
|
|
3
|
+
"changelog": "@changesets/cli/changelog",
|
|
4
|
+
"commit": false,
|
|
5
|
+
"fixed": [],
|
|
6
|
+
"linked": [],
|
|
7
|
+
"access": "public",
|
|
8
|
+
"baseBranch": "main",
|
|
9
|
+
"updateInternalDependencies": "patch",
|
|
10
|
+
"ignore": []
|
|
11
|
+
}
|
package/.editorconfig
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Editor configuration, see http://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
charset = utf-8
|
|
6
|
+
indent_style = space
|
|
7
|
+
indent_size = 4
|
|
8
|
+
insert_final_newline = true
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
|
|
11
|
+
[*.md]
|
|
12
|
+
max_line_length = off
|
|
13
|
+
trim_trailing_whitespace = false
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
release:
|
|
12
|
+
name: Release
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout Repo
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install pnpm
|
|
19
|
+
uses: pnpm/action-setup@v4
|
|
20
|
+
with:
|
|
21
|
+
version: 9.0.0
|
|
22
|
+
|
|
23
|
+
- name: Setup Node.js 20.x
|
|
24
|
+
uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: 20.x
|
|
27
|
+
|
|
28
|
+
- name: Install Dependencies
|
|
29
|
+
run: pnpm i
|
|
30
|
+
|
|
31
|
+
- name: Create Release Pull Request or Publish to npm
|
|
32
|
+
id: changesets
|
|
33
|
+
uses: changesets/action@v1
|
|
34
|
+
with:
|
|
35
|
+
# This expects you to have a script called release which does a build for your packages and calls changeset publish
|
|
36
|
+
publish: pnpm release
|
|
37
|
+
env:
|
|
38
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
39
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
node-version: [18, 20, 22]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Install pnpm
|
|
21
|
+
uses: pnpm/action-setup@v4
|
|
22
|
+
|
|
23
|
+
- name: Use Node.js ${{ matrix.node-version }}
|
|
24
|
+
uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: ${{ matrix.node-version }}
|
|
27
|
+
cache: 'pnpm'
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies
|
|
30
|
+
run: pnpm install
|
|
31
|
+
|
|
32
|
+
- name: Build
|
|
33
|
+
run: pnpm build
|
|
34
|
+
|
|
35
|
+
- name: Test
|
|
36
|
+
run: pnpm test
|
package/.prettierignore
ADDED
package/.prettierrc
ADDED
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# @logdash/core
|
|
2
|
+
|
|
3
|
+
## 1.0.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 6d8dc70: feat: stringify json arguments
|
|
8
|
+
|
|
9
|
+
## 1.0.8
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- a9ece96: chore: update readme with metrics
|
|
14
|
+
|
|
15
|
+
## 1.0.7
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 1f07662: chore: noop
|
|
20
|
+
|
|
21
|
+
## 1.0.6
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- 43c9f2b: feat: batch improvements
|
|
26
|
+
|
|
27
|
+
## 1.0.5
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- ce5af16: feat: add verbose metrics and host property
|
|
32
|
+
|
|
33
|
+
## 1.0.4
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- 6fa859b: feat: adjust contracts
|
|
38
|
+
|
|
39
|
+
## 1.0.3
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- 05215d9: fix: fix dto
|
|
44
|
+
|
|
45
|
+
## 1.0.2
|
|
46
|
+
|
|
47
|
+
### Patch Changes
|
|
48
|
+
|
|
49
|
+
- 16a8a5e: fix: add export
|
|
50
|
+
|
|
51
|
+
## 1.0.1
|
|
52
|
+
|
|
53
|
+
### Patch Changes
|
|
54
|
+
|
|
55
|
+
- 51b6213: feat: add metrics
|
|
56
|
+
|
|
57
|
+
## 1.0.0
|
|
58
|
+
|
|
59
|
+
### Major Changes
|
|
60
|
+
|
|
61
|
+
- c4fdbc3: fix: pretty logs, fix docs typos, etc
|
|
62
|
+
|
|
63
|
+
## 0.3.8
|
|
64
|
+
|
|
65
|
+
### Patch Changes
|
|
66
|
+
|
|
67
|
+
- 8e69ab7: feat: add info method
|
|
68
|
+
|
|
69
|
+
## 0.3.7
|
|
70
|
+
|
|
71
|
+
### Patch Changes
|
|
72
|
+
|
|
73
|
+
- 62f0ae6: feat: improve contract
|
|
74
|
+
|
|
75
|
+
## 0.3.6
|
|
76
|
+
|
|
77
|
+
### Patch Changes
|
|
78
|
+
|
|
79
|
+
- ce61576: fix date format
|
|
80
|
+
|
|
81
|
+
## 0.3.5
|
|
82
|
+
|
|
83
|
+
### Patch Changes
|
|
84
|
+
|
|
85
|
+
- 55d067f: export logger
|
|
86
|
+
|
|
87
|
+
## 0.3.4
|
|
88
|
+
|
|
89
|
+
### Patch Changes
|
|
90
|
+
|
|
91
|
+
- 887b6a1: add sequence numbers
|
|
92
|
+
|
|
93
|
+
## 0.3.3
|
|
94
|
+
|
|
95
|
+
### Patch Changes
|
|
96
|
+
|
|
97
|
+
- 2adb433: fix: warn->warning
|
|
98
|
+
|
|
99
|
+
## 0.3.2
|
|
100
|
+
|
|
101
|
+
### Patch Changes
|
|
102
|
+
|
|
103
|
+
- 6c1ec4f: chore: down chalk
|
|
104
|
+
- a583af0: chore: up lf
|
|
105
|
+
|
|
106
|
+
## 0.3.1
|
|
107
|
+
|
|
108
|
+
### Patch Changes
|
|
109
|
+
|
|
110
|
+
- d836249: chore: bump chalk
|
|
111
|
+
|
|
112
|
+
## 0.3.0
|
|
113
|
+
|
|
114
|
+
### Minor Changes
|
|
115
|
+
|
|
116
|
+
- f9873fa: fix: remove module type
|
|
117
|
+
|
|
118
|
+
## 0.2.0
|
|
119
|
+
|
|
120
|
+
### Minor Changes
|
|
121
|
+
|
|
122
|
+
- 76e2276: fix: chalk import bug
|
|
123
|
+
|
|
124
|
+
## 0.1.2
|
|
125
|
+
|
|
126
|
+
### Patch Changes
|
|
127
|
+
|
|
128
|
+
- 5e8f554: fix: imports
|
|
129
|
+
|
|
130
|
+
## 0.1.1
|
|
131
|
+
|
|
132
|
+
### Patch Changes
|
|
133
|
+
|
|
134
|
+
- 4078824: fix: lizma
|
|
135
|
+
|
|
136
|
+
## 0.1.0
|
|
137
|
+
|
|
138
|
+
### Minor Changes
|
|
139
|
+
|
|
140
|
+
- 5483389: feat: logger
|
|
141
|
+
|
|
142
|
+
## 0.0.2
|
|
143
|
+
|
|
144
|
+
### Patch Changes
|
|
145
|
+
|
|
146
|
+
- 4558f7e: chore: changesets
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Szymon Grącki
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# @logdash/node
|
|
2
|
+
|
|
3
|
+
Logdash is a zero-config observability platform. This package serves a Node.js/Bun/Deno/Browser interface to use it.
|
|
4
|
+
|
|
5
|
+
## Pre-requisites
|
|
6
|
+
|
|
7
|
+
Setup your free project in less than 2 minutes at [logdash.io](https://logdash.io/)
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
npm install @logdash/node
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Logging
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { Logdash } from '@logdash/node';
|
|
19
|
+
|
|
20
|
+
const logdash = new Logdash('<your-api-key>');
|
|
21
|
+
|
|
22
|
+
logdash.info('Application started successfully');
|
|
23
|
+
logdash.error('An unexpected error occurred');
|
|
24
|
+
logdash.warn('Low disk space warning');
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Namespaced Logging
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
const authLogdash = logdash.withNamespace('auth');
|
|
31
|
+
authLogdash.info('User logged in');
|
|
32
|
+
authLogdash.error('Authentication failed');
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Metrics
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { Logdash } from '@logdash/node';
|
|
39
|
+
|
|
40
|
+
const logdash = new Logdash('<your-api-key>');
|
|
41
|
+
|
|
42
|
+
// to set absolute value
|
|
43
|
+
logdash.setMetric('users', 0);
|
|
44
|
+
|
|
45
|
+
// to modify existing metric
|
|
46
|
+
logdash.mutateMetric('users', 1);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Graceful Shutdown
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// Ensure all logs and metrics are sent before exiting
|
|
53
|
+
await logdash.flush();
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## View
|
|
57
|
+
|
|
58
|
+
To see the logs or metrics, go to your project dashboard
|
|
59
|
+
|
|
60
|
+

|
|
61
|
+

|
|
62
|
+
|
|
63
|
+
## Configuration
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
new Logdash(apiKey?, options?)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
| Parameter | Required | Default | Description |
|
|
70
|
+
| ----------------- | -------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
|
|
71
|
+
| `apiKey` | no | - | Api key used to authorize against logdash servers. If you don't provide one, logs will be logged into local console only |
|
|
72
|
+
| `options.host` | no | `https://api.logdash.io` | Custom API host, useful with self-hosted instances |
|
|
73
|
+
| `options.verbose` | no | `false` | Useful for debugging purposes |
|
|
74
|
+
|
|
75
|
+
## License
|
|
76
|
+
|
|
77
|
+
This project is licensed under the MIT License.
|
|
78
|
+
|
|
79
|
+
## Support
|
|
80
|
+
|
|
81
|
+
If you encounter any issues, please open an issue on GitHub or let us know at [contact@logdash.io](mailto:contact@logdash.io).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { RequestQueue } from './queue/RequestQueue.js';
|
|
2
|
+
import { LogPayload, MetricPayload } from './transport/HttpTransport.js';
|
|
3
|
+
export interface LogdashOptions {
|
|
4
|
+
host?: string;
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface LogdashCore {
|
|
8
|
+
logQueue: RequestQueue<LogPayload>;
|
|
9
|
+
metricQueue: RequestQueue<MetricPayload>;
|
|
10
|
+
sequenceNumber: number;
|
|
11
|
+
verbose: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class Logdash {
|
|
14
|
+
private readonly core;
|
|
15
|
+
private readonly namespace?;
|
|
16
|
+
constructor(apiKey?: string, options?: LogdashOptions);
|
|
17
|
+
constructor(core: LogdashCore, namespace: string);
|
|
18
|
+
private isLogdashCore;
|
|
19
|
+
error(...data: unknown[]): void;
|
|
20
|
+
warn(...data: unknown[]): void;
|
|
21
|
+
info(...data: unknown[]): void;
|
|
22
|
+
http(...data: unknown[]): void;
|
|
23
|
+
verbose(...data: unknown[]): void;
|
|
24
|
+
debug(...data: unknown[]): void;
|
|
25
|
+
silly(...data: unknown[]): void;
|
|
26
|
+
setMetric(name: string, value: number): void;
|
|
27
|
+
mutateMetric(name: string, delta: number): void;
|
|
28
|
+
withNamespace(name: string): Logdash;
|
|
29
|
+
flush(): Promise<void>;
|
|
30
|
+
destroy(): void;
|
|
31
|
+
private log;
|
|
32
|
+
private printToConsole;
|
|
33
|
+
private formatData;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=Logdash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logdash.d.ts","sourceRoot":"","sources":["../src/Logdash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAEN,UAAU,EACV,aAAa,EACb,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,cAAc;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAYD,UAAU,WAAW;IACpB,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACnC,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,OAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAExB,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;gBACzC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM;IA8BhD,OAAO,CAAC,aAAa;IAWrB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIjC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAa5C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAe/C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAM9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,GAAG;IAiBX,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,UAAU;CAclB"}
|
package/dist/Logdash.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { internalLogger } from './logger/internalLogger.js';
|
|
3
|
+
import { RequestQueue } from './queue/RequestQueue.js';
|
|
4
|
+
import { HttpTransport, } from './transport/HttpTransport.js';
|
|
5
|
+
import { LogLevel } from './types/LogLevel.js';
|
|
6
|
+
const LOG_LEVEL_COLORS = {
|
|
7
|
+
[LogLevel.ERROR]: [231, 0, 11],
|
|
8
|
+
[LogLevel.WARN]: [254, 154, 0],
|
|
9
|
+
[LogLevel.INFO]: [21, 93, 252],
|
|
10
|
+
[LogLevel.HTTP]: [0, 166, 166],
|
|
11
|
+
[LogLevel.VERBOSE]: [0, 166, 0],
|
|
12
|
+
[LogLevel.DEBUG]: [0, 166, 62],
|
|
13
|
+
[LogLevel.SILLY]: [80, 80, 80],
|
|
14
|
+
};
|
|
15
|
+
export class Logdash {
|
|
16
|
+
constructor(apiKeyOrCore, optionsOrNamespace) {
|
|
17
|
+
if (this.isLogdashCore(apiKeyOrCore)) {
|
|
18
|
+
// Internal constructor for namespaced instances
|
|
19
|
+
this.core = apiKeyOrCore;
|
|
20
|
+
this.namespace = optionsOrNamespace;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Public constructor: new Logdash(apiKey?, options?)
|
|
24
|
+
const apiKey = apiKeyOrCore ?? '';
|
|
25
|
+
const options = optionsOrNamespace;
|
|
26
|
+
const host = options?.host ?? 'https://api.logdash.io';
|
|
27
|
+
const verbose = options?.verbose ?? false;
|
|
28
|
+
const transport = new HttpTransport({ host, apiKey });
|
|
29
|
+
this.core = {
|
|
30
|
+
logQueue: new RequestQueue((logs) => transport.sendLogs(logs)),
|
|
31
|
+
metricQueue: new RequestQueue((metrics) => transport.sendMetrics(metrics)),
|
|
32
|
+
sequenceNumber: 0,
|
|
33
|
+
verbose,
|
|
34
|
+
};
|
|
35
|
+
this.namespace = undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
isLogdashCore(value) {
|
|
39
|
+
return (typeof value === 'object' &&
|
|
40
|
+
value !== null &&
|
|
41
|
+
'logQueue' in value &&
|
|
42
|
+
'metricQueue' in value);
|
|
43
|
+
}
|
|
44
|
+
// === Logging Methods ===
|
|
45
|
+
error(...data) {
|
|
46
|
+
this.log(LogLevel.ERROR, data);
|
|
47
|
+
}
|
|
48
|
+
warn(...data) {
|
|
49
|
+
this.log(LogLevel.WARN, data);
|
|
50
|
+
}
|
|
51
|
+
info(...data) {
|
|
52
|
+
this.log(LogLevel.INFO, data);
|
|
53
|
+
}
|
|
54
|
+
http(...data) {
|
|
55
|
+
this.log(LogLevel.HTTP, data);
|
|
56
|
+
}
|
|
57
|
+
verbose(...data) {
|
|
58
|
+
this.log(LogLevel.VERBOSE, data);
|
|
59
|
+
}
|
|
60
|
+
debug(...data) {
|
|
61
|
+
this.log(LogLevel.DEBUG, data);
|
|
62
|
+
}
|
|
63
|
+
silly(...data) {
|
|
64
|
+
this.log(LogLevel.SILLY, data);
|
|
65
|
+
}
|
|
66
|
+
// === Metric Methods ===
|
|
67
|
+
setMetric(name, value) {
|
|
68
|
+
if (this.core.verbose) {
|
|
69
|
+
internalLogger.verbose(`Setting metric ${name} to ${value}`);
|
|
70
|
+
}
|
|
71
|
+
this.core.metricQueue.add({
|
|
72
|
+
name,
|
|
73
|
+
value,
|
|
74
|
+
operation: 'set',
|
|
75
|
+
namespace: this.namespace,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
mutateMetric(name, delta) {
|
|
79
|
+
if (this.core.verbose) {
|
|
80
|
+
internalLogger.verbose(`Mutating metric ${name} by ${delta}`);
|
|
81
|
+
}
|
|
82
|
+
this.core.metricQueue.add({
|
|
83
|
+
name,
|
|
84
|
+
value: delta,
|
|
85
|
+
operation: 'change',
|
|
86
|
+
namespace: this.namespace,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// === Namespace ===
|
|
90
|
+
withNamespace(name) {
|
|
91
|
+
return new Logdash(this.core, name);
|
|
92
|
+
}
|
|
93
|
+
// === Lifecycle ===
|
|
94
|
+
async flush() {
|
|
95
|
+
await Promise.all([
|
|
96
|
+
this.core.logQueue.flush(),
|
|
97
|
+
this.core.metricQueue.flush(),
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
destroy() {
|
|
101
|
+
this.core.logQueue.destroy();
|
|
102
|
+
this.core.metricQueue.destroy();
|
|
103
|
+
}
|
|
104
|
+
// === Private Methods ===
|
|
105
|
+
log(level, data) {
|
|
106
|
+
const message = this.formatData(data);
|
|
107
|
+
const now = new Date();
|
|
108
|
+
// Print to console with colors
|
|
109
|
+
this.printToConsole(level, message, now);
|
|
110
|
+
// Queue for sending
|
|
111
|
+
this.core.logQueue.add({
|
|
112
|
+
message,
|
|
113
|
+
level,
|
|
114
|
+
createdAt: now.toISOString(),
|
|
115
|
+
sequenceNumber: this.core.sequenceNumber++,
|
|
116
|
+
namespace: this.namespace,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
printToConsole(level, message, date) {
|
|
120
|
+
const color = LOG_LEVEL_COLORS[level];
|
|
121
|
+
const datePrefix = chalk.rgb(156, 156, 156)(`[${date.toISOString()}]`);
|
|
122
|
+
const levelPrefix = chalk.rgb(color[0], color[1], color[2])(`${level.toUpperCase()} `);
|
|
123
|
+
const namespacePrefix = this.namespace
|
|
124
|
+
? chalk.rgb(180, 180, 180)(`[${this.namespace}] `)
|
|
125
|
+
: '';
|
|
126
|
+
const formattedMessage = `${datePrefix} ${levelPrefix}${namespacePrefix}${message}`;
|
|
127
|
+
console.log(formattedMessage);
|
|
128
|
+
}
|
|
129
|
+
formatData(data) {
|
|
130
|
+
return data
|
|
131
|
+
.map((item) => {
|
|
132
|
+
if (typeof item === 'object' && item !== null) {
|
|
133
|
+
try {
|
|
134
|
+
return JSON.stringify(item);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return String(item);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return String(item);
|
|
141
|
+
})
|
|
142
|
+
.join(' ');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=Logdash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logdash.js","sourceRoot":"","sources":["../src/Logdash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpTransport.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/HttpTransport.test.ts"],"names":[],"mappings":""}
|