Как создать предсказуемые места ведения журналов с помощью sbt-native-packager

Я использую sbt-native-packager с экспериментальным архетипом Java Server. Я пытаюсь определить обычный способ доступа к моим файлам журнала, и мне интересно, знает ли кто-нибудь об общем подходе здесь. Поскольку я использую архетип Java Server, я получаю символическую ссылку /var/log/$app -> install_dir/$app/log, но это кажется немного грязным и менее переносимым, если просто открыть log4j /var/log/$ app/error.log напрямую.

[Обновлять]

В итоге я создал объект с информацией о пути во время выполнения:

object MakaraPaths {
  def getLogPath = new File(getJarPath, "../logs").getPath
  def getConfigPath = new File(getJarPath, "../conf").getPath

  def getJarPath = { 
    val regex = new Regex("(/.+/)*")
    val jarPath = Makara.getClass.getProtectionDomain.getCodeSource.getLocation.getPath

    (regex findAllIn jarPath).mkString("")
  }
}

В моем основном методе я установил системное свойство на основе нового объекта MakaraPaths:

System.setProperty("logPath", MakaraPaths.getLogPath)

Я также использовал это для своего файла конфигурации:

val config = ConfigFactory.parseFile(new File(MakaraPaths.getConfigPath, "application.conf"))

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

<RollingFile name="fileAppender" fileName="${sys:logPath}/server.log" filePattern="${sys:logPath}/server_%d{yyMMdd}.log">

Это дает мне большую часть пути, где я должен быть. Он не полностью переносим, ​​но технически поддерживает мой вариант использования. (Развертывание в Ubuntu)


person Brian    schedule 07.01.2014    source источник


Ответы (1)


Вы можете использовать относительный путь в конфигурации log4j. Просто пишите логи в logs/filename.log. При установке будет создана симлинк install_dir/$app/logs -> /var/log/$app и все логи будут записываться в /var/log/$app/filename.log

person kardapoltsev    schedule 08.01.2014
comment
Я изменил свою конфигурацию log4j2.xml, чтобы использовать относительный путь. ‹RollingFile name=fileAppender fileName=../logs/server.log filePattern=../logs/server_%d{yyMMdd}.log› Однако при этом создается только папка в $whatever_folder_im_in/../logs. sbt-native-packager создает символическую ссылку /usr/bin/$app -> /usr/share/$app/bin/$app, которая позволяет запускать экземпляр из любой папки, поэтому я просто получаю папку ../logs повсюду система. Похоже, мне нужно провести дополнительное исследование конфигураций log4j2, например, найти фактическое расположение файла класса, вызывающего регистратор, если это возможно. - person Brian; 09.01.2014
comment
Вы используете выскочку или systemV? - person kardapoltsev; 09.01.2014
comment
Я использую метод Upstart по умолчанию. Не указан загрузчик сервера. Кроме того, возможно, стоит отметить, что я использую пакет debian с debian:package-bin. - person Brian; 09.01.2014
comment
А как вы запускаете свое приложение, какую версию пакета используете? - person kardapoltsev; 10.01.2014
comment
началось с sudo start makara, используя addSbtPlugin(com.typesafe.sbt % sbt-native-packager % 0.7.0-M1). однако во время тестирования я бы просто выполнил makara, что привело бы к удалению файлов относительно CWD. - person Brian; 10.01.2014
comment
Проблема в том, что когда вы используете upstart или systemV, CWD устанавливается в каталог установки, а когда вы просто выполняете makara, это не так. - person kardapoltsev; 10.01.2014
comment
Спасибо, что разъяснили это. Я сейчас наблюдаю за этим поведением. - person Brian; 10.01.2014