Logging Connector Entity Storage Examples
These examples show how to persist log entries, query them back, and shape the storage entities used by the connector.
EntityStorageLoggingConnector
import { MemoryEntityStorageConnector } from '@twin.org/entity-storage-connector-memory';
import { EntityStorageConnectorFactory } from '@twin.org/entity-storage-models';
import { nameof } from '@twin.org/nameof';
import {
EntityStorageLoggingConnector,
initSchema,
type LogEntry
} from '@twin.org/logging-connector-entity-storage';
initSchema();
EntityStorageConnectorFactory.register(
'log-entry',
() =>
new MemoryEntityStorageConnector<LogEntry>({
entitySchema: nameof<LogEntry>()
})
);
const connector = new EntityStorageLoggingConnector({
config: {
levels: ['info', 'error']
}
});
const className = connector.className();
await connector.log({
level: 'error',
source: 'ingestion-service',
message: 'payloadRejected',
ts: Date.now(),
data: {
recordId: 'r-1001',
reason: 'invalid schema'
},
error: new Error('Validation failed')
});
import {
ComparisonOperator,
LogicalOperator,
SortDirection,
type EntityCondition
} from '@twin.org/entity';
import type { ILogEntry } from '@twin.org/logging-models';
import { EntityStorageLoggingConnector } from '@twin.org/logging-connector-entity-storage';
const connector = new EntityStorageLoggingConnector();
const conditions: EntityCondition<ILogEntry> = {
logicalOperator: LogicalOperator.And,
conditions: [
{
property: 'level',
comparison: ComparisonOperator.Equals,
value: 'error'
}
]
};
const queryResult = await connector.query(
conditions,
[{ property: 'ts', sortDirection: SortDirection.Descending }],
['level', 'source', 'message', 'ts'],
'cursor-1',
25
);
LogEntry
import type { LogEntry } from '@twin.org/logging-connector-entity-storage';
const logEntry: LogEntry = {
id: '80f9b61a',
level: 'warn',
source: 'scheduler',
ts: Date.now(),
message: 'slowExecution',
data: {
durationMs: 1275,
thresholdMs: 1000
}
};
LogEntryError
import type { LogEntryError } from '@twin.org/logging-connector-entity-storage';
const logEntryError: LogEntryError = {
name: 'ValidationError',
message: 'The payload did not pass validation',
source: 'payload-validator',
properties: {
field: 'age',
expected: '>= 18'
},
stack: 'ValidationError: The payload did not pass validation'
};