Netestoval jsem to, ale přístup, který by mohl fungovat, by bylo spustit proces na pozadí, který vytvoří a aktualizuje symbolický odkaz na nejnovější soubor protokolu, a pak byste tail -f
(nebo tail -F
) symbolický odkaz.
Věřím, že nejjednodušší řešení je následující:
tail -f `ls -tr | tail -n 1`
Nyní, pokud váš adresář obsahuje další soubory protokolu, jako je „SystemLog“ a chcete pouze nejnovější soubor „SoftwareLog“, pak byste jednoduše zahrnuli grep takto:
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
[Edit:po rychlém googlování nástroje]
Možná budete chtít vyzkoušet multitail - http://www.vanheusden.com/multitail/
Pokud se chcete držet odpovědi Dennise Williamsona (a podle toho jsem mu dal +1), zde jsou pro vás vyplněná prázdná místa.
Ve vašem shellu spusťte následující skript (nebo je to ekvivalent zsh, to jsem vymyslel v bash, než jsem viděl značku zsh):
#!/bin/bash
TARGET_DIR="some/logfiles/"
SYMLINK_FILE="SoftwareLog.latest"
SYMLINK_PATH="$TARGET_DIR/$SYMLINK_FILE"
function getLastModifiedFile {
echo $(ls -t "$TARGET_DIR" | grep -v "$SYMLINK_FILE" | head -1)
}
function getCurrentlySymlinkedFile {
if [[ -h $SYMLINK_PATH ]]
then
echo $(ls -l $SYMLINK_PATH | awk '{print $NF}')
else
echo ""
fi
}
symlinkedFile=$(getCurrentlySymlinkedFile)
while true
do
sleep 10
lastModified=$(getLastModifiedFile)
if [[ $symlinkedFile != $lastModified ]]
then
ln -nsf $lastModified $SYMLINK_PATH
symlinkedFile=$lastModified
fi
done
Pozadí tohoto procesu pomocí normální metody (opět neznám zsh, takže to může být jiné)...
./updateSymlink.sh 2>&1 > /dev/null
Poté tail -F $SYMLINK_PATH
tak, že ocas ručí za změnu symbolického odkazu nebo otočení souboru.
Je to trochu zamotané, ale neznám jiný způsob, jak to udělat s ocasem. Pokud někdo ví o nástroji, který to zvládá, ať udělá krok vpřed, protože bych to rád viděl i já - aplikace jako Jetty ve výchozím nastavení provádějí protokoly tímto způsobem a já vždy skriptuji symbolický skript spuštěný na cronu, abych to kompenzoval za to.
[Edit:Odebráno chybné 'j' z konce jednoho z řádků. Také jste měli špatný název proměnné „lastModifiedFile“ neexistoval, správný název, který jste nastavili, je „lastModified“]