為了Parse 1GB多的Log檔,挑出有Exception的樣式,用UltradEdit等Editor肯定大量消耗Memory。還是用Perl寫個小程式簡單。如下:

#!/usr/bin/perl
my $file = shift;
my $outfile = shift;
open F, $file or die "error:$!";
open G, ">$outfile" or die "error:$!";
my $line = 1;
while (<F>) {
    if (/^\tat|Exception/i) {
        print G "$line: $_";
    }
    $line++;
}
close F;
close G;

  這樣就可以挑出以下的Log寫到outfile指定的檔名。會Regex的人一看就知道粉簡單的程式。

3999: org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [INSERT INTO PUSHTRACE   (  CN_PUSHINFOID, CN_PUSHCONTENT, CV_PUSHPERSON, CN_PUSHDATE, CV_SUBSCRIBERID, CV_STATUS, CV_TYPE,CN_SENDCOUNT  )  VALUES  (  ?, ?, ?, ?, ?, ?, ?, ? ) ]; ORA-00001: unique constraint (XYZ.PUSHTRACE_PK) violated
4000: ; nested exception is java.sql.SQLException: ORA-00001: unique constraint (XYZ.PUSHTRACE_PK) violated
4003: java.sql.SQLException: ORA-00001: unique constraint (XYZ.PUSHTRACE_PK) violated
4005:     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
4006:     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
4007:     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
4008:     at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
4009:     at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
4010:     at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
4011:     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
4012:     at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3316)
4013:     at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3400)
4014:     at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
4015:     at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:744)
4016:     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:537)
4017:     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:738)
4018:     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:796)
4019:     at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:804)
arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(2) 人氣()