2017-02-18 5 views
0

Apache::Log::Parser을 사용하여 Apache 로그 파일을 구문 분석합니다.Time :: Piece with Apache :: Log :: Parser 사용

다음 코드를 사용하여 로그 파일에서 날짜를 추출했습니다.

my $parser = Apache::Log::Parser->new(fast=>1); 
my $log = $parser->parse($data); 
$t = $log->{date}; 

지금, 나는 날짜를 구문 분석 Time::Piece을 사용하려고하지만 난 그것을 할 수없는거야.

print "$t->day_of_month"; 

하지만 작동하지 않습니다. Time :: Piece를 사용하여 날짜를 파싱하는 방법?

답변

3

문자열 보간 내부의 객체에 대한 메소드를 호출 할 수 없습니다. 이 같은 그것은 것이다 아마 출력 뭔가 :

Sat Feb 18 12:44:47 2017->day_of_month 

이 메소드를 호출하는 따옴표 ""를 제거합니다.

print $t->day_of_month; 

이제 출력은 다음과 같습니다 당신이 당신의 로그에 획기적인 값이, 또는 경우 strptime를 사용하는 경우 localtime 또는 gmtime와 시간 :: 조각 객체를 생성해야

18 

주 날짜는 일종의 타임 스탬프입니다.

+0

큰 따옴표를 제거하면 오류가 발생합니다. '패키지 또는 객체 참조없이 'day_of_month 메서드를 호출 할 수 없습니다.' – Pradeep

+0

@Pradeep이 내 대답의 마지막 부분을 읽습니다. 먼저 객체를 만들어야합니다. 그냥 Time :: Piece를 떨어 뜨리면 마술처럼 일부 값을 날짜 객체로 변환하지 않습니다. – simbabque

+0

새로운 Time :: Piece Object', Time :: Piece-> strptime ($ log -> {date}, "% Y")를 만들려고했으나 '던지기 오류가 계속 발생했습니다. : /xampp/perl/lib/Time/Piece.pm line 469' – Pradeep