@loglayer/transport-google-cloud-logging 2.1.2 → 2.2.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/README.md +53 -3
- package/dist/index.cjs +17 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -4
- package/dist/index.d.ts +10 -4
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ npm install @loglayer/transport-google-cloud-logging @google-cloud/logging seria
|
|
|
18
18
|
|
|
19
19
|
This transport uses `log.entry(metadata, data)` as described in the library documentation.
|
|
20
20
|
|
|
21
|
-
- The `metadata` portion is not the data from `withMetadata()` or `withContext()`. See the `rootLevelData`
|
|
21
|
+
- The `metadata` portion is not the data from `withMetadata()` or `withContext()`. See the `rootLevelData` and `rootLevelMetadataFields` options
|
|
22
22
|
for this transport on how to modify this value.
|
|
23
23
|
- The `data` portion is actually the `jsonPayload` is what the transport uses for all LogLayer data.
|
|
24
24
|
- The message data is stored in `jsonPayload.message`
|
|
@@ -54,8 +54,8 @@ logger.info("Hello from Cloud Run!");
|
|
|
54
54
|
|
|
55
55
|
### `rootLevelData`
|
|
56
56
|
|
|
57
|
-
The root level
|
|
58
|
-
This is
|
|
57
|
+
The root level metadata to include for all log entries.
|
|
58
|
+
This value is merged with metadata provided using `withContext()`.
|
|
59
59
|
|
|
60
60
|
The `rootLevelData` option accepts any valid [Google Cloud LogEntry](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry)
|
|
61
61
|
fields except for `severity`, `timestamp`, and `jsonPayload` which are managed by the transport.
|
|
@@ -82,6 +82,56 @@ const logger = new LogLayer({
|
|
|
82
82
|
});
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
+
### `rootLevelMetadataFields`
|
|
86
|
+
|
|
87
|
+
By default, `withMetadata()` fields are forwarded as part of `jsonPayload` of the [LogEntry](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry).
|
|
88
|
+
|
|
89
|
+
The `rootLevelMetadataFields` option accepts an array of field names to pluck from metadata and shallow merge with `rootLevelData`. This allows you to dynamically specify the metadata portion of a log entry.
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
const logger = new LogLayer({
|
|
93
|
+
transport: new GoogleCloudLoggingTransport({
|
|
94
|
+
logger: log,
|
|
95
|
+
rootLevelMetadataFields: ["labels"],
|
|
96
|
+
rootLevelData: {
|
|
97
|
+
labels: {
|
|
98
|
+
environment: "production",
|
|
99
|
+
location: "west",
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
}),
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// This will overwrite `labels` in root level data.
|
|
106
|
+
// `customField` is still sent as part of `jsonPayload`.
|
|
107
|
+
logger
|
|
108
|
+
.withMetadata({ labels: { location: "east" }, customField: "example" })
|
|
109
|
+
.info("example")
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
To allow mapping to every supported `LogEntry` metadata field, the following list is recommended:
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
const logger = new LogLayer({
|
|
116
|
+
transport: new GoogleCloudLoggingTransport({
|
|
117
|
+
logger: log,
|
|
118
|
+
rootLevelMetadataFields: [
|
|
119
|
+
"logName",
|
|
120
|
+
"resource",
|
|
121
|
+
"insertId",
|
|
122
|
+
"httpRequest",
|
|
123
|
+
"labels",
|
|
124
|
+
"operation",
|
|
125
|
+
"trace",
|
|
126
|
+
"spanId",
|
|
127
|
+
"traceSampled",
|
|
128
|
+
"sourceLocation",
|
|
129
|
+
"split",
|
|
130
|
+
],
|
|
131
|
+
}),
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
85
135
|
## Log Level Mapping
|
|
86
136
|
|
|
87
137
|
LogLayer log levels are mapped to Google Cloud Logging severity levels as follows:
|
package/dist/index.cjs
CHANGED
|
@@ -3,9 +3,11 @@ var _transport = require('@loglayer/transport');
|
|
|
3
3
|
var GoogleCloudLoggingTransport = class extends _transport.BaseTransport {
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
|
|
6
7
|
constructor(config) {
|
|
7
8
|
super(config);
|
|
8
9
|
this.rootLevelData = config.rootLevelData || {};
|
|
10
|
+
this.rootLevelMetadataFields = _nullishCoalesce(config.rootLevelMetadataFields, () => ( []));
|
|
9
11
|
this.level = _nullishCoalesce(config.level, () => ( _transport.LogLevel.trace));
|
|
10
12
|
}
|
|
11
13
|
mapLogLevel(level) {
|
|
@@ -26,18 +28,32 @@ var GoogleCloudLoggingTransport = class extends _transport.BaseTransport {
|
|
|
26
28
|
return "DEFAULT";
|
|
27
29
|
}
|
|
28
30
|
}
|
|
31
|
+
extractLogEntryFields(data) {
|
|
32
|
+
const keys = Object.keys(data);
|
|
33
|
+
const metadata = {};
|
|
34
|
+
for (const key of keys) {
|
|
35
|
+
if (this.rootLevelMetadataFields.includes(key)) {
|
|
36
|
+
metadata[key] = data[key];
|
|
37
|
+
delete data[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return metadata;
|
|
41
|
+
}
|
|
29
42
|
shipToLogger({ data, hasData, logLevel, messages }) {
|
|
30
43
|
if (_transport.LogLevelPriority[logLevel] < _transport.LogLevelPriority[this.level]) {
|
|
31
44
|
return [];
|
|
32
45
|
}
|
|
46
|
+
const safeData = data && hasData ? data : {};
|
|
47
|
+
const metadata = this.extractLogEntryFields(safeData);
|
|
33
48
|
const entry = this.logger.entry(
|
|
34
49
|
{
|
|
35
50
|
...this.rootLevelData,
|
|
51
|
+
...metadata,
|
|
36
52
|
severity: this.mapLogLevel(logLevel),
|
|
37
53
|
timestamp: /* @__PURE__ */ new Date()
|
|
38
54
|
},
|
|
39
55
|
{
|
|
40
|
-
...
|
|
56
|
+
...safeData,
|
|
41
57
|
message: messages.join(" ")
|
|
42
58
|
}
|
|
43
59
|
);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/loglayer/loglayer/packages/transports/google-cloud-logging/dist/index.cjs","../src/GoogleCloudLoggingTransport.ts"],"names":[],"mappings":"AAAA;ACGA,gDAA6E;
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/loglayer/loglayer/packages/transports/google-cloud-logging/dist/index.cjs","../src/GoogleCloudLoggingTransport.ts"],"names":[],"mappings":"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","file":"/home/runner/work/loglayer/loglayer/packages/transports/google-cloud-logging/dist/index.cjs","sourcesContent":[null,"import type { Log, LogSync } from \"@google-cloud/logging\";\nimport type { LogEntry } from \"@google-cloud/logging/build/src/entry.js\";\nimport type { LogLayerTransportConfig, LogLayerTransportParams } from \"@loglayer/transport\";\nimport { BaseTransport, LogLevel, LogLevelPriority, type LogLevelType } from \"@loglayer/transport\";\n\nexport interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log | LogSync> {\n /**\n * The root level data to include for all log entries.\n * \"severity\", \"timestamp\" and \"jsonPayload\" are already populated by the transport.\n * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry\n */\n rootLevelData?: Omit<\n LogEntry,\n \"severity\" | \"timestamp\" | \"receiveTimestamp\" | \"jsonPayload\" | \"textPayload\" | \"protoPayload\"\n >;\n\n /**\n * List of LogLayer metadata fields to merge into `rootLevelData` when creating the log entry.\n */\n rootLevelMetadataFields?: Array<string>;\n\n /**\n * Minimum log level to process. Defaults to \"trace\"\n */\n level?: LogLevelType;\n}\n\nexport class GoogleCloudLoggingTransport extends BaseTransport<Log | LogSync> {\n private rootLevelData: GoogleCloudLoggingTransportConfig[\"rootLevelData\"];\n private rootLevelMetadataFields: Array<string>;\n private level: LogLevelType;\n\n constructor(config: GoogleCloudLoggingTransportConfig) {\n super(config);\n this.rootLevelData = config.rootLevelData || {};\n this.rootLevelMetadataFields = config.rootLevelMetadataFields ?? [];\n this.level = config.level ?? LogLevel.trace; // Default to trace to allow all logs\n }\n\n private mapLogLevel(level: LogLevelType): string {\n switch (level) {\n case LogLevel.fatal:\n return \"CRITICAL\";\n case LogLevel.error:\n return \"ERROR\";\n case LogLevel.warn:\n return \"WARNING\";\n case LogLevel.info:\n return \"INFO\";\n case LogLevel.debug:\n return \"DEBUG\";\n case LogLevel.trace:\n return \"DEBUG\";\n default:\n return \"DEFAULT\";\n }\n }\n\n private extractLogEntryFields(data: Record<string, unknown>) {\n const keys = Object.keys(data);\n const metadata: Record<string, unknown> = {};\n\n for (const key of keys) {\n if (this.rootLevelMetadataFields.includes(key)) {\n metadata[key] = data[key];\n delete data[key];\n }\n }\n\n return metadata;\n }\n\n shipToLogger({ data, hasData, logLevel, messages }: LogLayerTransportParams): any[] {\n // Skip if log level is lower priority than configured minimum\n if (LogLevelPriority[logLevel] < LogLevelPriority[this.level]) {\n return [];\n }\n\n const safeData = data && hasData ? data : {};\n const metadata = this.extractLogEntryFields(safeData);\n\n const entry = this.logger.entry(\n {\n ...this.rootLevelData,\n ...metadata,\n severity: this.mapLogLevel(logLevel),\n timestamp: new Date(),\n },\n {\n ...safeData,\n message: messages.join(\" \"),\n },\n );\n\n this.logger.write(entry);\n\n if (data && hasData) {\n return [data, messages];\n }\n\n return [messages];\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
|
-
import { Log } from '@google-cloud/logging';
|
|
1
|
+
import { Log, LogSync } from '@google-cloud/logging';
|
|
2
2
|
import { LogEntry } from '@google-cloud/logging/build/src/entry.js';
|
|
3
3
|
import { BaseTransport, LogLayerTransportConfig, LogLevelType, LogLayerTransportParams } from '@loglayer/transport';
|
|
4
4
|
|
|
5
|
-
interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log> {
|
|
5
|
+
interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log | LogSync> {
|
|
6
6
|
/**
|
|
7
7
|
* The root level data to include for all log entries.
|
|
8
8
|
* "severity", "timestamp" and "jsonPayload" are already populated by the transport.
|
|
9
9
|
* @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
|
|
10
10
|
*/
|
|
11
|
-
rootLevelData?: Omit<LogEntry, "severity" | "timestamp" | "jsonPayload">;
|
|
11
|
+
rootLevelData?: Omit<LogEntry, "severity" | "timestamp" | "receiveTimestamp" | "jsonPayload" | "textPayload" | "protoPayload">;
|
|
12
|
+
/**
|
|
13
|
+
* List of LogLayer metadata fields to merge into `rootLevelData` when creating the log entry.
|
|
14
|
+
*/
|
|
15
|
+
rootLevelMetadataFields?: Array<string>;
|
|
12
16
|
/**
|
|
13
17
|
* Minimum log level to process. Defaults to "trace"
|
|
14
18
|
*/
|
|
15
19
|
level?: LogLevelType;
|
|
16
20
|
}
|
|
17
|
-
declare class GoogleCloudLoggingTransport extends BaseTransport<Log> {
|
|
21
|
+
declare class GoogleCloudLoggingTransport extends BaseTransport<Log | LogSync> {
|
|
18
22
|
private rootLevelData;
|
|
23
|
+
private rootLevelMetadataFields;
|
|
19
24
|
private level;
|
|
20
25
|
constructor(config: GoogleCloudLoggingTransportConfig);
|
|
21
26
|
private mapLogLevel;
|
|
27
|
+
private extractLogEntryFields;
|
|
22
28
|
shipToLogger({ data, hasData, logLevel, messages }: LogLayerTransportParams): any[];
|
|
23
29
|
}
|
|
24
30
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
|
-
import { Log } from '@google-cloud/logging';
|
|
1
|
+
import { Log, LogSync } from '@google-cloud/logging';
|
|
2
2
|
import { LogEntry } from '@google-cloud/logging/build/src/entry.js';
|
|
3
3
|
import { BaseTransport, LogLayerTransportConfig, LogLevelType, LogLayerTransportParams } from '@loglayer/transport';
|
|
4
4
|
|
|
5
|
-
interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log> {
|
|
5
|
+
interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log | LogSync> {
|
|
6
6
|
/**
|
|
7
7
|
* The root level data to include for all log entries.
|
|
8
8
|
* "severity", "timestamp" and "jsonPayload" are already populated by the transport.
|
|
9
9
|
* @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
|
|
10
10
|
*/
|
|
11
|
-
rootLevelData?: Omit<LogEntry, "severity" | "timestamp" | "jsonPayload">;
|
|
11
|
+
rootLevelData?: Omit<LogEntry, "severity" | "timestamp" | "receiveTimestamp" | "jsonPayload" | "textPayload" | "protoPayload">;
|
|
12
|
+
/**
|
|
13
|
+
* List of LogLayer metadata fields to merge into `rootLevelData` when creating the log entry.
|
|
14
|
+
*/
|
|
15
|
+
rootLevelMetadataFields?: Array<string>;
|
|
12
16
|
/**
|
|
13
17
|
* Minimum log level to process. Defaults to "trace"
|
|
14
18
|
*/
|
|
15
19
|
level?: LogLevelType;
|
|
16
20
|
}
|
|
17
|
-
declare class GoogleCloudLoggingTransport extends BaseTransport<Log> {
|
|
21
|
+
declare class GoogleCloudLoggingTransport extends BaseTransport<Log | LogSync> {
|
|
18
22
|
private rootLevelData;
|
|
23
|
+
private rootLevelMetadataFields;
|
|
19
24
|
private level;
|
|
20
25
|
constructor(config: GoogleCloudLoggingTransportConfig);
|
|
21
26
|
private mapLogLevel;
|
|
27
|
+
private extractLogEntryFields;
|
|
22
28
|
shipToLogger({ data, hasData, logLevel, messages }: LogLayerTransportParams): any[];
|
|
23
29
|
}
|
|
24
30
|
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
import { BaseTransport, LogLevel, LogLevelPriority } from "@loglayer/transport";
|
|
3
3
|
var GoogleCloudLoggingTransport = class extends BaseTransport {
|
|
4
4
|
rootLevelData;
|
|
5
|
+
rootLevelMetadataFields;
|
|
5
6
|
level;
|
|
6
7
|
constructor(config) {
|
|
7
8
|
super(config);
|
|
8
9
|
this.rootLevelData = config.rootLevelData || {};
|
|
10
|
+
this.rootLevelMetadataFields = config.rootLevelMetadataFields ?? [];
|
|
9
11
|
this.level = config.level ?? LogLevel.trace;
|
|
10
12
|
}
|
|
11
13
|
mapLogLevel(level) {
|
|
@@ -26,18 +28,32 @@ var GoogleCloudLoggingTransport = class extends BaseTransport {
|
|
|
26
28
|
return "DEFAULT";
|
|
27
29
|
}
|
|
28
30
|
}
|
|
31
|
+
extractLogEntryFields(data) {
|
|
32
|
+
const keys = Object.keys(data);
|
|
33
|
+
const metadata = {};
|
|
34
|
+
for (const key of keys) {
|
|
35
|
+
if (this.rootLevelMetadataFields.includes(key)) {
|
|
36
|
+
metadata[key] = data[key];
|
|
37
|
+
delete data[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return metadata;
|
|
41
|
+
}
|
|
29
42
|
shipToLogger({ data, hasData, logLevel, messages }) {
|
|
30
43
|
if (LogLevelPriority[logLevel] < LogLevelPriority[this.level]) {
|
|
31
44
|
return [];
|
|
32
45
|
}
|
|
46
|
+
const safeData = data && hasData ? data : {};
|
|
47
|
+
const metadata = this.extractLogEntryFields(safeData);
|
|
33
48
|
const entry = this.logger.entry(
|
|
34
49
|
{
|
|
35
50
|
...this.rootLevelData,
|
|
51
|
+
...metadata,
|
|
36
52
|
severity: this.mapLogLevel(logLevel),
|
|
37
53
|
timestamp: /* @__PURE__ */ new Date()
|
|
38
54
|
},
|
|
39
55
|
{
|
|
40
|
-
...
|
|
56
|
+
...safeData,
|
|
41
57
|
message: messages.join(" ")
|
|
42
58
|
}
|
|
43
59
|
);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/GoogleCloudLoggingTransport.ts"],"sourcesContent":["import type { Log } from \"@google-cloud/logging\";\nimport type { LogEntry } from \"@google-cloud/logging/build/src/entry.js\";\nimport type { LogLayerTransportConfig, LogLayerTransportParams } from \"@loglayer/transport\";\nimport { BaseTransport, LogLevel, LogLevelPriority, type LogLevelType } from \"@loglayer/transport\";\n\nexport interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log> {\n /**\n * The root level data to include for all log entries.\n * \"severity\", \"timestamp\" and \"jsonPayload\" are already populated by the transport.\n * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry\n */\n rootLevelData?: Omit
|
|
1
|
+
{"version":3,"sources":["../src/GoogleCloudLoggingTransport.ts"],"sourcesContent":["import type { Log, LogSync } from \"@google-cloud/logging\";\nimport type { LogEntry } from \"@google-cloud/logging/build/src/entry.js\";\nimport type { LogLayerTransportConfig, LogLayerTransportParams } from \"@loglayer/transport\";\nimport { BaseTransport, LogLevel, LogLevelPriority, type LogLevelType } from \"@loglayer/transport\";\n\nexport interface GoogleCloudLoggingTransportConfig extends LogLayerTransportConfig<Log | LogSync> {\n /**\n * The root level data to include for all log entries.\n * \"severity\", \"timestamp\" and \"jsonPayload\" are already populated by the transport.\n * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry\n */\n rootLevelData?: Omit<\n LogEntry,\n \"severity\" | \"timestamp\" | \"receiveTimestamp\" | \"jsonPayload\" | \"textPayload\" | \"protoPayload\"\n >;\n\n /**\n * List of LogLayer metadata fields to merge into `rootLevelData` when creating the log entry.\n */\n rootLevelMetadataFields?: Array<string>;\n\n /**\n * Minimum log level to process. Defaults to \"trace\"\n */\n level?: LogLevelType;\n}\n\nexport class GoogleCloudLoggingTransport extends BaseTransport<Log | LogSync> {\n private rootLevelData: GoogleCloudLoggingTransportConfig[\"rootLevelData\"];\n private rootLevelMetadataFields: Array<string>;\n private level: LogLevelType;\n\n constructor(config: GoogleCloudLoggingTransportConfig) {\n super(config);\n this.rootLevelData = config.rootLevelData || {};\n this.rootLevelMetadataFields = config.rootLevelMetadataFields ?? [];\n this.level = config.level ?? LogLevel.trace; // Default to trace to allow all logs\n }\n\n private mapLogLevel(level: LogLevelType): string {\n switch (level) {\n case LogLevel.fatal:\n return \"CRITICAL\";\n case LogLevel.error:\n return \"ERROR\";\n case LogLevel.warn:\n return \"WARNING\";\n case LogLevel.info:\n return \"INFO\";\n case LogLevel.debug:\n return \"DEBUG\";\n case LogLevel.trace:\n return \"DEBUG\";\n default:\n return \"DEFAULT\";\n }\n }\n\n private extractLogEntryFields(data: Record<string, unknown>) {\n const keys = Object.keys(data);\n const metadata: Record<string, unknown> = {};\n\n for (const key of keys) {\n if (this.rootLevelMetadataFields.includes(key)) {\n metadata[key] = data[key];\n delete data[key];\n }\n }\n\n return metadata;\n }\n\n shipToLogger({ data, hasData, logLevel, messages }: LogLayerTransportParams): any[] {\n // Skip if log level is lower priority than configured minimum\n if (LogLevelPriority[logLevel] < LogLevelPriority[this.level]) {\n return [];\n }\n\n const safeData = data && hasData ? data : {};\n const metadata = this.extractLogEntryFields(safeData);\n\n const entry = this.logger.entry(\n {\n ...this.rootLevelData,\n ...metadata,\n severity: this.mapLogLevel(logLevel),\n timestamp: new Date(),\n },\n {\n ...safeData,\n message: messages.join(\" \"),\n },\n );\n\n this.logger.write(entry);\n\n if (data && hasData) {\n return [data, messages];\n }\n\n return [messages];\n }\n}\n"],"mappings":";AAGA,SAAS,eAAe,UAAU,wBAA2C;AAwBtE,IAAM,8BAAN,cAA0C,cAA6B;AAAA,EACpE;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAA2C;AACrD,UAAM,MAAM;AACZ,SAAK,gBAAgB,OAAO,iBAAiB,CAAC;AAC9C,SAAK,0BAA0B,OAAO,2BAA2B,CAAC;AAClE,SAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EACxC;AAAA,EAEQ,YAAY,OAA6B;AAC/C,YAAQ,OAAO;AAAA,MACb,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,sBAAsB,MAA+B;AAC3D,UAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,UAAM,WAAoC,CAAC;AAE3C,eAAW,OAAO,MAAM;AACtB,UAAI,KAAK,wBAAwB,SAAS,GAAG,GAAG;AAC9C,iBAAS,GAAG,IAAI,KAAK,GAAG;AACxB,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,EAAE,MAAM,SAAS,UAAU,SAAS,GAAmC;AAElF,QAAI,iBAAiB,QAAQ,IAAI,iBAAiB,KAAK,KAAK,GAAG;AAC7D,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,WAAW,QAAQ,UAAU,OAAO,CAAC;AAC3C,UAAM,WAAW,KAAK,sBAAsB,QAAQ;AAEpD,UAAM,QAAQ,KAAK,OAAO;AAAA,MACxB;AAAA,QACE,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,QACH,UAAU,KAAK,YAAY,QAAQ;AAAA,QACnC,WAAW,oBAAI,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,SAAS,SAAS,KAAK,GAAG;AAAA,MAC5B;AAAA,IACF;AAEA,SAAK,OAAO,MAAM,KAAK;AAEvB,QAAI,QAAQ,SAAS;AACnB,aAAO,CAAC,MAAM,QAAQ;AAAA,IACxB;AAEA,WAAO,CAAC,QAAQ;AAAA,EAClB;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loglayer/transport-google-cloud-logging",
|
|
3
3
|
"description": "Google Cloud Logging (Stackdriver) transport for the LogLayer logging library.",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
7
|
"module": "./dist/index.js",
|