import {Fragment} from 'react';
import ExternalLink from 'sentry/components/links/externalLink';
import {Layout, LayoutProps} from 'sentry/components/onboarding/gettingStartedDoc/layout';
import {ModuleProps} from 'sentry/components/onboarding/gettingStartedDoc/sdkDocumentation';
import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
import {t, tct} from 'sentry/locale';
interface StepProps {
dsn: string;
organizationSlug?: string;
projectSlug?: string;
sourcePackageRegistries?: ModuleProps['sourcePackageRegistries'];
}
// Configuration Start
const introduction = (
{tct(
'The sentry-logback library provides Logback support for Sentry using an [link:Appender] that sends logged exceptions to Sentry.',
{
link: (
),
}
)}
);
export const steps = ({
dsn,
sourcePackageRegistries,
projectSlug,
organizationSlug,
}: StepProps): LayoutProps['steps'] => [
{
type: StepType.INSTALL,
description: t(
"Install Sentry's integration with Logback using either Maven or Gradle:"
),
configurations: [
{
description: {t('Maven')}
,
configurations: [
{
language: 'xml',
partialLoading: sourcePackageRegistries?.isLoading,
code: `
io.sentry
sentry-logback
${
sourcePackageRegistries?.isLoading
? t('\u2026loading')
: sourcePackageRegistries?.data?.['sentry.java.logback']?.version ?? '6.27.0'
}
`,
},
{
language: 'xml',
partialLoading: sourcePackageRegistries?.isLoading,
description: t(
'To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.'
),
code: `
io.sentry
sentry-maven-plugin
${
sourcePackageRegistries?.isLoading
? t('\u2026loading')
: sourcePackageRegistries?.data?.['sentry.java.mavenplugin']?.version ?? '0.0.3'
}
true
/path/to/sentry-cli
${organizationSlug}
${projectSlug}
env.SENTRY_AUTH_TOKEN
generate-resources
uploadSourceBundle
...
`,
},
],
},
{
description: {t('Graddle')}
,
configurations: [
{
language: 'groovy',
partialLoading: sourcePackageRegistries?.isLoading,
code: `implementation 'io.sentry:sentry-logback:${
sourcePackageRegistries?.isLoading
? t('\u2026loading')
: sourcePackageRegistries?.data?.['sentry.java.logback']?.version ??
'6.27.0'
}'`,
},
{
description: t(
'To upload your source code to Sentry so it can be shown in stack traces, use our Maven plugin.'
),
language: 'groovy',
partialLoading: sourcePackageRegistries?.isLoading,
code: `
buildscript {
repositories {
mavenCentral()
}
}
plugins {
id "io.sentry.jvm.gradle" version "${
sourcePackageRegistries?.isLoading
? t('\u2026loading')
: sourcePackageRegistries?.data?.['sentry.java.android.gradle-plugin']?.version ??
'3.11.1'
}"
}
sentry {
// Generates a JVM (Java, Kotlin, etc.) source bundle and uploads your source code to Sentry.
// This enables source context, allowing you to see your source
// code as part of your stack traces in Sentry.
includeSourceContext = true
org = "${organizationSlug}"
projectName = "${projectSlug}"
authToken = "your-sentry-auth-token"
}
`,
},
],
},
],
additionalInfo: (
{tct('For other dependency managers see the [link:central Maven repository].', {
link: (
),
})}
),
},
{
type: StepType.CONFIGURE,
description: t(
"Configure Sentry as soon as possible in your application's lifecycle:"
),
configurations: [
{
language: 'xml',
description: t(
'The following example configures a ConsoleAppender that logs to standard out at the INFO level, and a SentryAppender that logs to the Sentry server at the ERROR level. This only an example of a non-Sentry appender set to a different logging threshold, similar to what you may already have in your project.'
),
code: `
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${dsn}
`,
additionalInfo: (
{tct(
"You'll also need to configure your DSN (client key) if it's not already in the [code:logback.xml] configuration. Learn more in [link:our documentation for DSN configuration].",
{
code:
,
link: (
),
}
)}
),
},
{
description: (
{tct(
"Next, you'll need to set your log levels, as illustrated here. You can learn more about [link:configuring log levels] in our documentation.",
{
link: (
),
}
)}
),
configurations: [
{
language: 'xml',
code: `
${dsn}
WARN
DEBUG
`,
},
],
},
],
},
{
type: StepType.VERIFY,
description: t(
'Last, create an intentional error, so you can test that everything is working:'
),
configurations: [
{
description: Java
,
language: 'java',
code: `
import java.lang.Exception;
import io.sentry.Sentry;
try {
throw new Exception("This is a test.");
} catch (Exception e) {
Sentry.captureException(e);
}
`,
},
{
description: Kotlin
,
language: 'java',
code: `
import java.lang.Exception
import io.sentry.Sentry
try {
throw Exception("This is a test.")
} catch (e: Exception) {
Sentry.captureException(e)
}
`,
},
],
additionalInfo: (
{t(
"If you're new to Sentry, use the email alert to access your account and complete a product tour."
)}
{t(
"If you're an existing user and have disabled alerts, you won't receive this email."
)}
),
},
];
// Configuration End
export function GettingStartedWithLogBack({
dsn,
sourcePackageRegistries,
projectSlug,
organization,
...props
}: ModuleProps) {
return (
);
}
export default GettingStartedWithLogBack;