![](/img/trans.png)
[英]Configurations to run multiple microservices in single micronaut Project
[英]How to use multiple configurations with logback in a single project?
logback 的配置文件可以在類路徑中找到,因此是 Eclipse-project-specific,這不是我想要的。 我正在使用多個 Java 實用程序,它們都駐留在一個項目中(這共享類路徑),我需要為其中一些使用特定配置。
我已經嘗試過變量替換和 Joram 配置器,但對我沒有任何幫助。 這很可能是我的錯,我有一天會解決它,但現在我需要一個簡單的解決方案。
選項 1:使用 logback.configurationFile 系統屬性指定 logback 配置文件的位置。 這實際上允許您在每個項目中擁有多個配置文件。 根據logback 文檔,此屬性的值可以是 URL、class 路徑上的資源或應用程序外部文件的路徑。 例如:
-Dlogback.configurationFile=/path/to/config.xml
選項 2:使用變量替換來設置具有系統屬性的日志文件的名稱。 例如:
<file>/var/tmp/${mycompany.myapplication}.log</file>
-Dmycompany.myapplication=SomeUtility
選項 3:使用系統屬性設置記錄器級別。 這將允許您記錄更多/更少。 例如:
<logger name="com.mycompany" level="${mycompany.logging.level:-DEBUG}"/>
-Dmycompany.logging.level=INFO
選項 4:通過將系統屬性命令行參數傳遞給 java 來添加/刪除附加程序。 這將允許您登錄到不同的地方。 請注意,條件處理需要 janino 。 例如:
<appender-ref>
的任何位置,將ref
值更改為您自己的<appender>
之一,當然:<if condition="property("mycompany.logging.console").equalsIgnoreCase("true")"> <then><appender-ref ref="STDOUT"/></then></if>
-Dmycompany.logging.console=true
關於系統屬性,您將它們傳遞給 java 作為-D
arguments,例如java -Dmy.property=/path/to/config.xml com.mycompany.MyMain
在 Spring 引導應用程序中,您可以在 logback 配置文件中引用 Spring 配置文件。
見 這篇文章。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProfile name="dev">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} | %5p | %logger{25} | %m%n
</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>
...
我使用了基於Leonidas 博客的另一個選項。 有兩個文件:
如果屬性文件存在並定義了logEnv
屬性,例如
logEnv = dev66
logback 嘗試從 logback-env- dev66
中查找並包含自定義配置
<included>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</included>
否則,它將回退到默認( <else>
部分)配置。 請注意, <included>
標簽在自定義配置文件中使用,而不是<configuration>
。
logback.xml 來管理上述所有事情:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds" debug="true">
<!-- To skip error if property file doesn't exist -->
<define name="propExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
<resource>environment.properties</resource>
</define>
<if condition='${propExists}'>
<then>
<property resource="environment.properties" />
</then>
</if>
<!-- If specific configuration exists, load it otherwise fallback to default (<else> section) -->
<define name="confExists" class="ch.qos.logback.core.property.ResourceExistsPropertyDefiner">
<resource>logback-env-${logEnv}.xml</resource>
</define>
<if condition='${confExists}'>
<then>
<include resource="logback-env-${logEnv}.xml"/>
</then>
<else>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</else>
</if>
</configuration>
它將允許您對所有環境進行單獨配置,定義自己的自定義配置(例如本地開發)而不影響其他人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.