有没有办法通过环境变量选择是否有 logback 附加程序?
我有一个 dockerized spring boot 微服务,现在添加了 ELK 堆栈。
到目前为止效果很好。
但现在如果我想在没有 ELK 堆栈的情况下启动服务,应用程序会抛出一个错误,它不知道 Logstash 的主机:
app | 10:09:23,537 |-ERROR in ch.qos.logback.classic.net.SyslogAppender[SYSLOG] - Could not create SyslogWriter java.net.UnknownHostException: logstash: Name or service not known
app | at java.net.UnknownHostException: logstash: Name or service not known
这是我的 logback.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
<syslogHost>logstash</syslogHost>
<port>5000</port>
<facility>LOCAL1</facility>
<suffixPattern>[%thread] %logger %msg</suffixPattern>
</appender>
<root level="INFO">
<appender-ref ref="SYSLOG"/>
</root>
</configuration>
我知道这是一个非常简单的版本,但我是使用 logback/ELK 堆栈进行日志记录的新手。
那么有没有一种方法可以像在 yaml 文件中那样注入环境变量,例如active=${LOGBACK_ACTIVE:false}
就像我可以用我的普罗米修斯指标来做到这一点?
在你的 logback.xml 中你可以使用<if>
构建以启用SYSLOG
当存在命名 JVM 参数时附加程序。
在下面的示例中,如果您运行应用程序-Dsyslog
那么你的SYSLOG
附加器将被使用,否则它将被忽略并且默认附加器,CONSOLE
,将参与:
<if condition='isDefined("syslog")'>
<then>
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
...
</appender>
<root level="INFO">
<appender-ref ref="SYSLOG" />
</root>
</then>
<else>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
...
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</else>
</if>
这需要一些重复root
声明,但因为您需要有条件地防止 SYSLOG 附加程序被实例化我想这可能是你唯一的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)