Nano Hash - криптовалюты, майнинг, программирование

Невозможно настроить log4j с помощью внешнего файла свойств Grails

Как настроить log4j с помощью внешнего файла свойств Grails?

В config.groovy:

grails.config.locations = [  
    "classpath:${appName}-config.properties",  
    "classpath:${appName}-config.groovy",  
    "file:${userHome}/.grails/${appName}-config.properties",  
    "file:${userHome}/.grails/${appName}-config.groovy"  
]

В ${appName}-config.properties:

log4j.rootLogger=ERROR, FA  
log4j.appender.FA=org.apache.log4j.FileAppender  
log4j.appender.FA.File=c:/logs/mylog.log  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n  

Выходной файл не создается, и на консоль выводится следующее:

log4j: ПРЕДУПРЕЖДЕНИЕ ОШИБКИ: возникла исключительная ситуация при настройке ведения журнала log4j: нет такого свойства: делегат для класса: java.lang.String

Спасибо

05.05.2015

Ответы:


1

Я заметил, что у вас есть:

"classpath:${appName}-config.properties",
"classpath:${appName}-config.groovy",
"file:${userHome}/.grails/${appName}-config. properties",
"file:${userHome}/.grails/${appName}-config.groovy"

Это может привести к избыточному объявлению свойств, что может привести к проблемам. Я бы попробовал удалить два верхних объявленных файла пути к классам и просто придерживаться одного файла свойств. Я обычно разделяю свои файлы свойств по средам, таким как (DEV, TEST, PROD), вам может понадобиться только DEV, но вы, возможно, когда-нибудь захотите иметь среду PROD. Также вам нужно убедиться, что ваша конфигурация log4j настроена правильно и достаточно проста, чтобы просто использовать то, что дает Grails с помощью команды create-app с небольшой настройкой.

Config.groovy:

 environments {
        development {
           appName = "application"
           logDirectory = "/where/to/keep/local/logs/"
          }
    production {
            appName = "application"
            configDir ="/path/to/prod/app/cfg/"
             //Make sure logDirectory is defined in your properties file
            grails.config.locations = ["file:${configDir}${appName}-config.properties"]
        }
    }

// log4j configuration
log4j = {
    println "Log Directory: ${logDirectory}"
    def logPrefix = "applicationName"

    appenders {
        console name:'stdout', layout:pattern(conversionPattern: '%c{2} - %X{userName} - %m%n')

        appender new DailyRollingFileAppender(
            name: 'stacktrace',
            datePattern: "'.'yyyy-MM-dd",
            fileName: "${logDirectory}/${logPrefix}Stacktrace.log",
            layout: pattern(conversionPattern:'%d [%t] %-5p %c{2} %x - %X{userName} - %m%n')
            )

        appender new DailyRollingFileAppender(
            name: 'logAppender',
            datePattern: "'.'yyyy-MM-dd",
            fileName: "${logDirectory}/${logPrefix}.log",
            layout: pattern(conversionPattern:'%d [%t] %-5p %c{2} %x - %X{userName} - %m%n')
        )

        appender new DailyRollingFileAppender(
            name: 'DebugLog',
            datePattern: "'.'yyyy-MM-dd",
            fileName: "${logDirectory}/${logPrefix}Debug.log",
            layout: pattern(conversionPattern:'%d{dd MMM yyyy HH:mm:ss} [%X{userName}] %c{2} %m%n')
        )
   }
}

Кроме того, я вижу, что вы храните свои свойства в каталоге .grails, лично я бы этого делать не стал. Если вы хотите сохранить его в своем приложении, вы можете создать каталог application/grails-app/cfg/, и доступ к файлу будет выглядеть примерно так:

 production {
                appName = "application"
                 //Make sure logDirectory is defined in your properties file
                grails.config.locations = ["file:../cfg/${appName}-config.properties"]
            }
05.05.2015
  • Конфигурация log4j работает правильно, если я использую ${appName}-config.groovy. Однако мне не удалось заставить его работать с помощью ${appName}-config.properties - та же ошибка. Я также попытался использовать один файл свойств, указанный в grails.config.locations. Пока я буду использовать groovy config. 06.05.2015
  • Просто изменение файла с .properties на .groovy сработало? У меня есть сторонний файл конфигурации, который я не могу изменить. Что мне делать? 01.03.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..