Ich muss das Protokoll der letzten 5 Minuten aus der Protokolldatei extrahieren. Hier ist meine Protokolldatei
[2022-02-08 13:26:21:352] [ERROR] [iBus Connection LifeCycle - CCMHost_DummyDevice_Backup_AD2::Management:::NRMCMO_FLPROD2] [com.example]
+ Message: Could not create an administered connection factory: Java heap space
+ Throwable: java.lang.OutOfMemoryError: Java heap space
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
+ Message: Unable to Initialize Connection
+ Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
+ Message: Unable to Initialize Connection
+ Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-01017, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:05:04:056] [ERROR] [JMS Session Delivery Thread - The user's password has expired.] [com.example]
Ich habe es damit versucht, aber es hat nicht funktioniert
awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" -v d2="$(date "+%Y-%m-%d %H:%M:%S:%3N")" '$0 > d1 && $0 < d2 || $0 ~ d2' filelog.log
Jede Hilfe wird geschätzt
Antwort1
Dies hat nicht funktioniert, da das erste Zeichen in der Protokollzeile eine eckige Klammer ist, und das verdirbt Ihren Vergleich. Wenn Sie zum Vergleichen nur den Datumsteil der Protokollzeile extrahieren, sollte es funktionieren. Beachten Sie, dass ich die Daten hier fest codiere, damit ich Ihre Beispielzeilen verwenden kann.
awk -v d1="2022-02-08 15:04:00" -v d2="2022-02-08 15:08:00" 'd1 < substr($0,2,19) && substr($0,2,19) < d2 || substr($0,2,19) ~ d2' filelog.log
Sie könnten Ihren Befehl tatsächlich vereinfachen. Da Sie nur an Zeiten interessiert sind, die jünger als 2 Stunden sind, könnten Sie „d2“ ganz weglassen. Wenn Sie nur an den Zeilen interessiert sind, in denen das Datum tatsächlich erscheint, können Sie künstliche Übereinstimmungen mit anderen Zeilen verhindern, indem Sie angeben, dass übereinstimmende Zeilen mit „[“ beginnen müssen, wie dies bei Ihren mit Datumsstempeln versehenen Zeilen der Fall ist.
awk -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" '/^\[/ && d1 < substr($0,2,19)' filelog.log
Wenn für Sie auch die zusätzlichen Zeilen unter jedem übereinstimmenden Datumsstempel von Bedeutung sind und zwischen jedem gültigen Zeileneintrag wirklich leere Zeilen stehen, können Sie diese verwenden, um den Datensatztrenner so zu ändern, dass die zusätzlichen Informationen aufgenommen werden und das Häkchen bei „[“ gelöscht wird, da die anderen Zeilen Teil desselben Datensatzes sind und nicht als separate Datensätze gefiltert werden müssen.
root@2ec99a4edaa9:/tmp# awk -v RS= -v d1="2022-02-08 15:04:00" 'd1 < substr($0,2,19)' filelog.log
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
+ Message: Unable to Initialize Connection
+ Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:09:37:068] [ERROR] [HikariCP connection filler (pool DirectReadConnection.9c292fc0.210e0ac7)] [com.example]
+ Message: Unable to Initialize Connection
+ Throwable: java.sql.SQLException: Listener refused the connection with the following error:
ORA-01017, TNS:listener does not currently know of SID given in connect descriptor
[2022-02-08 15:05:04:056] [ERROR] [JMS Session Delivery Thread - The user's password has expired.] [com.example]
Wenn Sie die Leerzeilen aus Gründen der Lesbarkeit in Ihrer Ausgabe beibehalten möchten, können Sie sie einfach -v ORS="\n\n"
zu Ihrer Awk-Anweisung hinzufügen.
Insgesamt würde Ihr geänderter Befehl folgendermaßen aussehen:
awk -v RS= -v ORS="\n\n" -v d1="$(date --date="2 hour ago" "+%Y-%m-%d %H:%M:%S:%3N")" 'd1 < substr($0,2,19)' filelog.log