Logback не смог найти ресурс файла внешнего свойства

Я использую logback версии 1.0.13. Чтобы прочитать ресурс внешнего свойства из журнала, я использовал запись JNDI (определенная в контексте Tomcat):

...
<insertFromJNDI env-entry-name="java:comp/env/app.config.path" as="app.config.path" /> 
<property resource="${app.config.path}" />
....

Проблема: журнал не находит мой ресурс JNDI: ${app.config.path}=file:///D:/temp/application.properties

ERROR in ch.qos.logback.core.joran.action.PropertyAction - Could not find resource [file:///D:/temp/application.properties]

не работает с другими URL-адресами, такими как: file://D:/, file:/D:/, file:////D:/,...

Какие-либо предложения?


person Slim BH    schedule 06.02.2014    source источник


Ответы (5)


Как отметил Бидит Кумар, файловый подход также работает. В моем случае у меня была аналогичная проблема, и мое решение приведено ниже (я применил решение 2)

Решение:

  1. <property file="C:\myproject\src\main\resources\com\mycompany\app.properties"/>

  2. <property resource="\com\mycompany\app.properties"/>

person Ravindran Kanniah    schedule 27.06.2016
comment
Я думаю, он говорит о случае, когда файл свойств находится вне проекта. Не в папке src/main/resources. У меня есть случай, когда application.properties находится в tomcat_dir/conf. Совершенно запутался, как получить доступ к файлу. - person Philip John; 17.08.2018

Настройка:

Язык: Java

Приложение: приложение Spring Boot.

Проект: Maven

Ведение журнала: ведение журнала

Контейнер: (Jetty для разработки | Tomcat для производства)


Ситуация:

В нашем проекте у нас есть logback.xml в корне ресурсов. Этот файл должен иметь доступ к определенным свойствам приложения. В приведенном ниже примере нам нужно получить доступ к свойству logging.home.dir, которое будет сохранено как LOGGER_HOME.

Пример: logback.xml

<configuration> 
  <property name="LOGGER_HOME" value="${logging.home.dir}" />

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGGER_HOME}/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- other setting --> 
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <!-- other setting --> 
    </encoder>
  </appender>
</configuration>

Проблема:

Обычно для разработки можно использовать файл свойств приложения по умолчанию application.properties для хранения всех необходимых свойств, но для производства этот файл является внешним.

Разработка

application.properties
logging.home.dir=temp/logs/
  • Для разработки, пока файл application.proerties доступен в пути к классам, на него можно ссылаться в logback.xml, используя <property resource="application.properties" />

Производство

Location: /opt/production/tc8-java8/my_wonderfull_app/application-prod.properties
application-prod.properties
logging.home.dir=application/logs/
  • Этот файл находится вне приложения. К сожалению, поскольку этот файл не находится в пути к классам, мы не можем загрузить этот файл, как мы это делали при разработке.

Решение:

Чтобы разрешить журналу использовать внешний файл свойств, вам необходимо сделать следующее:

Шаг 1. При запуске приложения вам нужно будет добавить параметр виртуальной машины, указывающий, куда загрузить внешний файл свойств: -Dmy.wonderful.app.external.properties.file=/opt/production/tc8-java8/my_wonderfull_app/application-prod.properties

Шаг 2. В файле журнала теперь можно использовать <property file="${my.wonderful.app.external.properties.file}" /> <!-- note this MUST match the VM option name -->

<property name="LOGGER_HOME" value="${logging.home.dir}" /> <!-- property key from the file -->


Короткий ответ:

Виртуальная машина приложения

-Dmy.wonderful.app.external.properties.file=/opt/production/tc8-java8/my_wonderfull_app/application-prod.properties

Logback.xml

‹ файл свойств="${my.wonderful.app.external.properties.file}" />


Примечание 1. Для Intellij добавление параметра виртуальной машины можно выполнить с помощью команды «Выполнить/отладить конфигурацию» > «Spring Boot» > [Конфигурация > «Среда» > «Параметры виртуальной машины:»]

Примечание 2. Для Tomcat добавление параметра виртуальной машины может быть выполнено в /bin/setenv.sh
CATALINA_OPTS=-Dmy.wonderful.app.external.properties.file=/opt/production/tc8 -java8/my_wonderfull_app/application-prod.properties

person Ithar    schedule 24.10.2018

Попробуйте использовать file="${app.config.path}" вместо resource="${app.config.path}"

<сильный>

и ${app.config.path}= D:/...

Дополнительные сведения см. в документации по журналу регистрации: http://logback.qos.ch/manual/configuration.html< /а>

person Bidit Kumar    schedule 16.12.2015

Родриго

Это мой файл config.properties:

logging.path = ./
logging.file = sync.log
logging.maxHistory = 5
logging.app.level = INFO
logging.libs.level = DEBUG

И мой файл logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property file="config.properties" />

    <!-- Console -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
             <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{60} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logging.path}${logging.file}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logging.path}${logging.file}-%d{yyyy-MM-dd}</fileNamePattern>
                <maxHistory>${logging.maxHistory}</maxHistory>
            </rollingPolicy>
           <encoder>
               <pattern>%date %level [%thread] %logger{160} [%file:%line] %msg%n</pattern>
           </encoder>
    </appender>

    <logger name="com.amazon" level="${logging.libs.level}"/>
    <logger name="com.amazonaws" level="${logging.libs.level}"/>
    <logger name="org.apache.http" level="${logging.libs.level}"/>
    <logger name="com.zaxxer.hikari" level="${logging.libs.level}"/>
    <logger name="org.flywaydb" level="${logging.libs.level}"/>

    <root level="${logging.app.level}">
        <appender-ref ref="FILE" />
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>
person Rod Lima    schedule 13.08.2016

SpringApplication загружает свойства из файлов application.properties в следующих местах и ​​добавляет их в среду Spring:

  1. Подкаталог /config текущего каталога
  2. Текущий каталог
  3. Пакет classpath/config
  4. Корень пути к классам

Если вам не нравится application.properties (случаи, когда вы хотите, чтобы оно отличалось для dev, stage, production environment) в качестве имени файла конфигурации, вы можете переключиться на другое имя файла, указав свойство среды spring.config.name. Вы также можете указать явное местоположение, используя свойство среды spring.config.location.

Вы можете попробовать следующее (Eclipse),

Установите переменные среды SPRING_CONFIG_LOCATION и SPRING_CONFIG_NAME с соответствующими значениями в конфигурации запуска.

введите здесь описание изображения

В logback.xml добавьте свойство ниже

<property
        file="${SPRING_CONFIG_LOCATION}${SPRING_CONFIG_NAME}.properties" />

Теперь вы можете получить доступ к свойству (скажем, variablename.xyz), присутствующему в вашем файле свойств, как показано ниже:

<property name="MY_PROPERTY" value="${variablename.xyz}" />
person Vishal Kharde    schedule 12.03.2020