Мы должны отобразить файлы журнала JBoss из нашего веб-приложения. Действительно ли возможно достигнуть этого, не используя ServerConfigLocator? Приложение должно быть в состоянии работать также с Websphere, и мы не хотим зависимостей от определенных БАНОК.
Помимо повышения производительности (что, вероятно, является предварительной оптимизацией в большинстве случаев *), она также защищает от (очень странного) сценария, когда конфигурация PHP среды не имеет текущего каталога (.
) как часть пути включения.
* Benchmark of включает
, используя путь, который требует просмотра include _ path
, в сравнении с относительным путем, который делает это. Протестировано более 100000 итераций каждый
Результаты
include("include.php"): 8.3664200305939s
include("./include.php"): 8.3511519432068s
(8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s
Если вы не включаете сотни или тысячи файлов, 0,0000001s в лучшем случае ничтожно мало.
Тестовый код
define("MAX", 100000);
ob_start();
$i = MAX;
$_t = microtime(true);
do {
include("include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();
echo "include(\"include.php\"): {$_t}s\n";
ob_start();
$i = MAX;
$_t = microtime(true);
do {
include("./include.php");
} while ( --$i );
$_t = microtime(true) - $_t;
ob_end_clean();
Тест проводился на 2.16GHz Macbook 10.5.8 с PHP версии 5.2.9 (www.entropy.ch версия 7)
-121--2299062-Я не тестировал это на коде 500, но это работает на других, таких как 200, 302 и 404.
response=$(curl --write-out %{http_code} --silent --output /dev/null servername)
В соответствии с предложением @ ibai добавьте -head
, чтобы сделать запрос только HEAD. Это сэкономит время при успешном извлечении, так как содержимое страницы не будет передано.
Определенный каталог журнала JBoss содержится в системном свойстве jboss.server.log.dir
. Этот каталог можно преобразовать в java.io.File
и прочитать файлы внутри.
File logDir = new File(System.getProperty("jboss.server.log.dir"));
logDir.list(); // etc etc
Это также можно получить через ServerConfig.getServerLogDir ()
(на JBoss 4.x, в любом случае), но вы сказали, что хотите избежать зависимостей JAR.
Вы можете использовать собственную реализацию журнала. Это даст вам полный контроль над поведением журнала.
JBoss использует Log4j в качестве механизма ведения журнала. WebSphere использует ведение журнала Jakarta Commons, которое можно настроить для делегирования Log4j, если оно еще не используется по умолчанию. Если вы уже используете Log4j в своем приложении, я не ожидаю, что эта разница вызовет у вас какие-либо новые проблемы.