Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions dev-packages/node-integration-tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"reflect-metadata": "0.2.1",
"rxjs": "^7.8.1",
"tedious": "^18.6.1",
"winston": "^3.17.0",
"yargs": "^16.2.0"
},
"devDependencies": {
Expand Down
73 changes: 73 additions & 0 deletions dev-packages/node-integration-tests/suites/winston/subject.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import * as Sentry from '@sentry/node';
import winston from 'winston';
import Transport from 'winston-transport';
import { loggingTransport } from '@sentry-internal/node-integration-tests';

Sentry.init({
dsn: 'https://[email protected]/1337',
release: '1.0.0',
environment: 'test',
_experiments: {
enableLogs: true,
},
transport: loggingTransport,
});

async function run(): Promise<void> {
// Create a custom transport that extends winston-transport
const SentryWinstonTransport = Sentry.createSentryWinstonTransport(Transport);

// Create logger with default levels
const logger = winston.createLogger({
transports: [new SentryWinstonTransport()],
});

// Test basic logging
logger.info('Test info message');
logger.error('Test error message');

// If custom levels are requested
if (process.env.CUSTOM_LEVELS === 'true') {
const customLevels = {
levels: {
error: 0,
warn: 1,
info: 2,
http: 3,
verbose: 4,
debug: 5,
silly: 6,
},
colors: {
error: 'red',
warn: 'yellow',
info: 'green',
http: 'magenta',
verbose: 'cyan',
debug: 'blue',
silly: 'grey',
},
};

const customLogger = winston.createLogger({
levels: customLevels.levels,
transports: [new SentryWinstonTransport()],
});

customLogger.info('Test info message');
customLogger.error('Test error message');
}

// If metadata is requested
if (process.env.WITH_METADATA === 'true') {
logger.info('Test message with metadata', {
foo: 'bar',
number: 42,
});
}

await Sentry.flush();
}

// eslint-disable-next-line @typescript-eslint/no-floating-promises
void run();
307 changes: 307 additions & 0 deletions dev-packages/node-integration-tests/suites/winston/test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,307 @@
import { afterAll, describe, test, expect } from 'vitest';
import { cleanupChildProcesses, createRunner } from '../../utils/runner';

describe('winston integration', () => {
afterAll(() => {
cleanupChildProcesses();
});

test('should capture winston logs with default levels', async () => {
const runner = createRunner(__dirname, 'subject.ts')
.expect({
otel_log: {
severityText: 'info',
body: {
stringValue: 'Test info message',
},
attributes: [
{
key: 'sentry.origin',
value: {
stringValue: 'auto.logging.winston',
},
},
{
key: 'server.address',
value: {
stringValue: expect.any(String),
},
},
{
key: 'sentry.release',
value: {
stringValue: '1.0.0',
},
},
{
key: 'sentry.environment',
value: {
stringValue: 'test',
},
},
{
key: 'sentry.sdk.name',
value: {
stringValue: 'sentry.javascript.node',
},
},
{
key: 'sentry.sdk.version',
value: {
stringValue: expect.any(String),
},
},
],
},
})
.expect({
otel_log: {
severityText: 'error',
body: {
stringValue: 'Test error message',
},
attributes: [
{
key: 'sentry.origin',
value: {
stringValue: 'auto.logging.winston',
},
},
{
key: 'server.address',
value: {
stringValue: expect.any(String),
},
},
{
key: 'sentry.release',
value: {
stringValue: '1.0.0',
},
},
{
key: 'sentry.environment',
value: {
stringValue: 'test',
},
},
{
key: 'sentry.sdk.name',
value: {
stringValue: 'sentry.javascript.node',
},
},
{
key: 'sentry.sdk.version',
value: {
stringValue: expect.any(String),
},
},
],
},
})
.start();

await runner.completed();
});

test('should capture winston logs with custom levels', async () => {
const runner = createRunner(__dirname, 'subject.ts')
.withEnv({ CUSTOM_LEVELS: 'true' })
.expect({
otel_log: {
severityText: 'info',
body: {
stringValue: 'Test info message',
},
attributes: [
{
key: 'sentry.origin',
value: {
stringValue: 'auto.logging.winston',
},
},
{
key: 'server.address',
value: {
stringValue: expect.any(String),
},
},
{
key: 'sentry.release',
value: {
stringValue: '1.0.0',
},
},
{
key: 'sentry.environment',
value: {
stringValue: 'test',
},
},
{
key: 'sentry.sdk.name',
value: {
stringValue: 'sentry.javascript.node',
},
},
{
key: 'sentry.sdk.version',
value: {
stringValue: expect.any(String),
},
},
],
},
})
.expect({
otel_log: {
severityText: 'error',
body: {
stringValue: 'Test error message',
},
attributes: [
{
key: 'sentry.origin',
value: {
stringValue: 'auto.logging.winston',
},
},
{
key: 'server.address',
value: {
stringValue: expect.any(String),
},
},
{
key: 'sentry.release',
value: {
stringValue: '1.0.0',
},
},
{
key: 'sentry.environment',
value: {
stringValue: 'test',
},
},
{
key: 'sentry.sdk.name',
value: {
stringValue: 'sentry.javascript.node',
},
},
{
key: 'sentry.sdk.version',
value: {
stringValue: expect.any(String),
},
},
],
},
})
.start();

await runner.completed();
});

test('should capture winston logs with metadata', async () => {
const runner = createRunner(__dirname, 'subject.ts')
.withEnv({ WITH_METADATA: 'true' })
.expect({
otel_log: {
severityText: 'info',
body: {
stringValue: 'Test info message',
},
attributes: [
{
key: 'sentry.origin',
value: {
stringValue: 'auto.logging.winston',
},
},
{
key: 'server.address',
value: {
stringValue: expect.any(String),
},
},
{
key: 'sentry.release',
value: {
stringValue: '1.0.0',
},
},
{
key: 'sentry.environment',
value: {
stringValue: 'test',
},
},
{
key: 'sentry.sdk.name',
value: {
stringValue: 'sentry.javascript.node',
},
},
{
key: 'sentry.sdk.version',
value: {
stringValue: expect.any(String),
},
},
],
},
})
.expect({
otel_log: {
severityText: 'error',
body: {
stringValue: 'Test error message',
},
attributes: [
{
key: 'sentry.origin',
value: {
stringValue: 'auto.logging.winston',
},
},
{
key: 'server.address',
value: {
stringValue: expect.any(String),
},
},
{
key: 'sentry.release',
value: {
stringValue: '1.0.0',
},
},
{
key: 'sentry.environment',
value: {
stringValue: 'test',
},
},
{
key: 'sentry.sdk.name',
value: {
stringValue: 'sentry.javascript.node',
},
},
{
key: 'sentry.sdk.version',
value: {
stringValue: expect.any(String),
},
},
],
},
})
.start();

await runner.completed();
});
});
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ export {
postgresIntegration,
prismaIntegration,
childProcessIntegration,
createSentryWinstonTransport,
redisIntegration,
requestDataIntegration,
rewriteFramesIntegration,
Expand Down
Loading
Loading