Java 为logback.xml Sentry appender动态设置Sentry的环境变量

Java 为logback.xml Sentry appender动态设置Sentry的环境变量,java,logback,slf4j,sentry,Java,Logback,Slf4j,Sentry,我的应用程序使用slf4j,当然,我有一个logback.xml文件。我试图在这个文件中添加一个岗哨附加器。这是我的logback.xml文件 信息 接受 否认 系统输出 %d%p%c{1.}%m%n 错误 接受 否认 系统错误 %d%p%c{1.}%m%n%ex{100} https://...Sentry dsn 错误 %d%p%c{1.}%m%n%ex{100} 我的应用程序在部署前已停靠,作为ci/cd的一部分,它部署在三个不同的环境中,即预调试和生产阶段。 问题是我只能通过应用程序

我的应用程序使用slf4j,当然,我有一个logback.xml文件。我试图在这个文件中添加一个岗哨附加器。这是我的logback.xml文件


信息
接受
否认
系统输出
%d%p%c{1.}%m%n
错误
接受
否认
系统错误
%d%p%c{1.}%m%n%ex{100}
https://...Sentry dsn
错误
%d%p%c{1.}%m%n%ex{100}
我的应用程序在部署前已停靠,作为ci/cd的一部分,它部署在三个不同的环境中,即预调试和生产阶段。 问题是我只能通过应用程序根目录下的属性文件提供变量。此属性文件将根据部署环境用值填充这意味着资源文件夹中不能有自动填充的sentry.properties。我想要的是设置Sentry环境,最好不要接触代码,因为这是slf4j appenders的整个要点。

我们使用Sentry logback集成自动导入的环境(shell)变量

SENTRY_DSN=https://xxxxxxxx@sentry.io/xxxxxx
SENTRY_TAGS=app:MyApplication,host:$HOSTNAME,project:${CI_PROJECT_NAME},branch:${CI_COMMIT_REF_NAME}
SENTRY_ENVIRONMENT=${CI_COMMIT_REF_NAME}
但是有一个很大的警告,它们不是插值的。

即使这些变量有一个值,它也不会被替换

不会解析
$HOSTNAME
${CI\u COMMIT\u REF\u NAME}
。这将导致字符串逐字添加并发送到sentry,如屏幕截图所示:


运行应用程序时(无论是Java、Node、Python还是使用任何其他官方支持的Sentry SDK),环境变量应由部署提供,而不是docker映像或打包的应用程序(jar文件,…)

具体放置位置取决于实际运行Docker容器的方式:

  • 普通
    docker在某些主机上运行
  • 作为docker compose设置的一部分的服务
  • 在Kubernetes部署中
这里我将只描述前两种情况,因为对于其他类型的部署,策略是相同的,对于如何将环境变量注入容器,应该参考相应工具的文档

码头工人 如果从命令行(或通过脚本)运行单个Docker容器,则只需将以下内容添加到
Docker run
命令():

docker运行-e SENTRY_ENVIRONMENT=“”。。。
docker compose …或在一个
docker compose.yml
()中:

。。。
服务:
我的服务:
...
环境:
哨兵环境:“
docker compose设置还支持名为
.env
的文件,该文件可用于从外部设置变量并使用

因此,您可以在
docker compose.yml
中使用以下内容:

。。。
服务:
我的服务:
...
环境:
岗哨环境:“${MYENV}”
…并在您的
.env
文件中:

MYENV=development
当然,您也可以在CI/CD链中生成一个包含环境变量的文件,并将该文件与应用程序一起部署,然后使用
docker run--env file myapp.env…
或以下
docker compose
配置:

。。。
服务:
我的服务:
...
环境文件:
-myapp.env

你找到解决方案了吗?@SudhanshuGupta但你能在应用程序启动时提供环境变量吗?因为哨兵也在那里寻找它的配置。