Fórum Root.cz

Hlavní témata => Server => Téma založeno: meo 02. 08. 2017, 11:17:54

Název: Logy podľa dátumu
Přispěvatel: meo 02. 08. 2017, 11:17:54
Ahojte,
poradili by ste mi ako by som z jedneho logu ktorý vypada takto: "Wed Aug  2 10:29:45 CEST 2017 INFO:" vypísal všetky logy napr za posledný týždeň?
Název: Re:Logy podľa dátumu
Přispěvatel: Mufasa 02. 08. 2017, 11:33:06
Je to vas locale?
`date +%c` sa podoba? Ak to nie je moc velky file asi by som si vypisal do premennej poslednych 7 datumov v tomto formate a grepol to
Název: Re:Logy podľa dátumu
Přispěvatel: MP 02. 08. 2017, 11:33:54
journalctl --since (--until)
Název: Re:Logy podľa dátumu
Přispěvatel: Mufasa 02. 08. 2017, 11:39:02
Co ak to nie je systemovy log, ale file z nejakej app?

Popravde ak to nepotrebujete automatizovat na velkej urovni tak
grep -e "Aug  [1-2]" -e "Jul 2[8-9]" -e "Jul 3[0-1]" file.log
Název: Re:Logy podľa dátumu
Přispěvatel: Kit 02. 08. 2017, 11:43:57
Můžeš zkusit parsovámí v Pythonu:
https://stackoverflow.com/questions/466345/converting-string-into-datetime (https://stackoverflow.com/questions/466345/converting-string-into-datetime)
https://stackoverflow.com/questions/1345827/how-do-i-find-the-time-difference-between-two-datetime-objects-in-python (https://stackoverflow.com/questions/1345827/how-do-i-find-the-time-difference-between-two-datetime-objects-in-python)
Název: Re:Logy podľa dátumu
Přispěvatel: erik80 02. 08. 2017, 11:52:43
#!/bin/bash
for d in `seq 7 -1 0`
do
   pttn=$(date -d "$d days ago" +'%a[ ]*%b[ ]*%e[ 0-9:]*%Z[ ]*%Y')
   grep "$pttn" log
done
Název: Re:Logy podľa dátumu
Přispěvatel: meo 02. 08. 2017, 12:12:26
Ďakujem veľmi pekne :)
Název: Re:Logy podľa dátumu
Přispěvatel: Tuxik 02. 08. 2017, 12:35:38
Nebo třeba...

Kód: [Vybrat]
#!/bin/bash
AGE=$2
CUR=$(date +%s)
MAGE=$(($CUR-(AGE*24*3600)))
cat $1 | while read line; do
    LTIME=$(  date --date "$(echo $line | cut -d' ' -f1-6)" +%s  )
    if [ $LTIME -ge $MAGE ]; then
        echo -e "$line"
    fi
done

použití
skript.sh nazev_logu pocet_dni
skript.sh log.log 10
Název: Re:Logy podľa dátumu
Přispěvatel: gll 02. 08. 2017, 13:34:34
Nebo třeba...

Kód: [Vybrat]
#!/bin/bash
AGE=$2
CUR=$(date +%s)
MAGE=$(($CUR-(AGE*24*3600)))
cat $1 | while read line; do
    LTIME=$(  date --date "$(echo $line | cut -d' ' -f1-6)" +%s  )
    if [ $LTIME -ge $MAGE ]; then
        echo -e "$line"
    fi
done

použití
skript.sh nazev_logu pocet_dni
skript.sh log.log 10

tohle bude zoufale pomalé, pro větší logy nepoužitelné.
Název: Re:Logy podľa dátumu
Přispěvatel: gll 02. 08. 2017, 14:05:45
#!/bin/bash
for d in `seq 7 -1 0`
do
   pttn=$(date -d "$d days ago" +'%a[ ]*%b[ ]*%e[ 0-9:]*%Z[ ]*%Y')
   grep "$pttn" log
done

tohle je dobré
Název: Re:Logy podľa dátumu
Přispěvatel: Tuxik 02. 08. 2017, 14:17:32
Nebo třeba...

Kód: [Vybrat]
#!/bin/bash
AGE=$2
CUR=$(date +%s)
MAGE=$(($CUR-(AGE*24*3600)))
cat $1 | while read line; do
    LTIME=$(  date --date "$(echo $line | cut -d' ' -f1-6)" +%s  )
    if [ $LTIME -ge $MAGE ]; then
        echo -e "$line"
    fi
done

použití
skript.sh nazev_logu pocet_dni
skript.sh log.log 10

tohle bude zoufale pomalé, pro větší logy nepoužitelné.
To jo, na velký logy blbý, ale obecně dobře upravitelný :D
Název: Re:Logy podľa dátumu
Přispěvatel: gll 02. 08. 2017, 15:08:40
Můžeš zkusit parsovámí v Pythonu:
https://stackoverflow.com/questions/466345/converting-string-into-datetime (https://stackoverflow.com/questions/466345/converting-string-into-datetime)
https://stackoverflow.com/questions/1345827/how-do-i-find-the-time-difference-between-two-datetime-objects-in-python (https://stackoverflow.com/questions/1345827/how-do-i-find-the-time-difference-between-two-datetime-objects-in-python)

funkce dateutil.parser.parse je celkem inteligentní. Stačí parse(line, fuzzy=True).date() a nemusí se specifikovat formát ani splitovat řádka.
Název: Re:Logy podľa dátumu
Přispěvatel: gll 02. 08. 2017, 15:12:00
To jo, na velký logy blbý, ale obecně dobře upravitelný :D

ono je toblbé už na docela malé logy. Kdybyste tu smyčku přepsal do nějakého skriptovacího jazyka, nebude to delší ani hůře upravitelné a zrychlí se to mnohanásobně.
Název: Re:Logy podľa dátumu
Přispěvatel: Tuxik 03. 08. 2017, 08:41:01
ono je toblbé už na docela malé logy. Kdybyste tu smyčku přepsal do nějakého skriptovacího jazyka, nebude to delší ani hůře upravitelné a zrychlí se to mnohanásobně.
Tak aby řeč nestála...

Kód: [Vybrat]
#!/usr/bin/python3

import sys
import time
import datetime

fromtime=time.time()-(int(sys.argv[2])*24*3600)

with open(sys.argv[1], 'rU') as f:
    for line in f:
        ldate = (line[0:29])
        secs=datetime.datetime.strptime(ldate, "%a %b %d %H:%M:%S %Z %Y").timestamp()
        if secs > fromtime:
            print(line,end="")

Nicméně pro velký logy je stejně nejefektivnější dohledat první vyhovující řádek a pak vypsat zbytek - třeba zkusit půlku souboru, větší/menší, půlku z půlky... v pár iteracích to najdeme a pak je to šup šup