2014-01-07 1 views
1

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

[Update]

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

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)

ответ

2

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

+0

Я изменил свой log4j2.xml для использования относительного пути. Однако это создает только папку в $ whatever_folder_im_in /../ журналы. sbt-native-packager создает приложение symlink/usr/bin/$ app ->/usr/share/$ app/bin/$, которое позволяет запускать экземпляр из любой папки, поэтому я просто получаю папку ../logs по всему система. Похоже, мне нужно сделать еще несколько исследований по конфигурациям log4j2, например, найти фактическое местоположение файла класса, вызывающего регистратор, если это возможно. – Brian

+0

Вы используете выскочку или систему V? – kardapoltsev

+0

Я использую метод Upstart по умолчанию. Нет загрузчика сервера. Кроме того, может быть стоит отметить, что я использую debian-упаковку с debian: package-bin. – Brian

 Смежные вопросы

  • Нет связанных вопросов^_^