8 die "Usage: $0 SRCFILE ...\n"
9 . "Extract log message from specified source code,\n"
10 . "and output log lists in CSV format.\n"
13 . " \$ $0 ../src/*.c ../module/*/*.c*\n";
19 # pick out all log message!
21 print STDERR "reading $src ... ";
23 print STDERR "\n$src: No such file\nPush Enter key to continue.\n";
28 if (!open $fh, "<", $src) {
29 print STDERR "\n$src: Cannot open file\nPush Enter key to continue.\n";
34 map { $all_line .= $_ } <$fh>;
38 $all_line =~ s/[\r\n]//g;
45 LOGGER_PUT_LOG_([^\s(]+) \s* \( \s* # LOGGER_PUT_LOG_LEVEL start
47 PUT_LOG_([^\s(]+) \s* \( [^,]+, \s* # PUT_LOG_LEVEL start
49 ([^\s,]+) \s* , \s* # log category
50 (\d+) \s* , \s* # log number
51 ( (?: (?: "[^"]*" \s* )+ | [^,)]+) ) # log message
53 \) \s* ; # log function end
56 my ($log, $category, $number, $message) = ($1, $4, $5, $6);
59 # push to hash table (push for duplicate log)
60 push @{ $all_log{$category}{$level}{$number}{file } }, $src;
61 push @{ $all_log{$category}{$level}{$number}{log } }, $log;
62 push @{ $all_log{$category}{$level}{$number}{message } }, $message;
66 print STDERR "$count logs.\n";
69 #print Dumper \%all_log;
75 for my $category (sort keys %all_log) {
76 print "===== $category =====\n";
77 for my $level ( sort keys %{ $all_log{$category} } ) {
78 print "----- $level -----\n";
79 for my $number ( sort { $a <=> $b } keys %{ $all_log{$category}{$level} } ) {
80 my $entry = $#{ $all_log{$category}{$level}{$number}{file} };
82 my $file = $all_log{$category}{$level}{$number}{file }[$_];
83 my $log = $all_log{$category}{$level}{$number}{log }[$_];
84 my $message = $all_log{$category}{$level}{$number}{message}[$_];
86 print "$category,$level,$number,$file,$message,";
90 push @duplicate_list, "$file: $log\n";
93 $summary{$category}{all}++;
94 $summary{$category}{$level}++;
95 $summary{$category}{duplicate}{all} += $entry;
96 $summary{$category}{duplicate}{$level} += $entry;
103 # print all duplicate log
104 #print "===== DUPLICATE LOG =====\n";
105 #for (@duplicate_list) {
111 print "===== SUMMARY =====\n";
112 for my $category (sort keys %summary) {
113 # category has duplicate log
114 if ( $summary{$category}{duplicate}{all} ) {
115 print "$category (duplicate)\n";
116 printf "ALL: %d(%d), ", $summary{$category}{all} || 0, $summary{$category}{duplicate}{all} || 0;
117 printf "FATAL: %d(%d), ", $summary{$category}{FATAL} || 0, $summary{$category}{duplicate}{FATAL} || 0;
118 printf "ERROR: %d(%d), ", $summary{$category}{ERROR} || 0, $summary{$category}{duplicate}{ERROR} || 0;
119 printf "WARN: %d(%d), ", $summary{$category}{WARN} || 0, $summary{$category}{duplicate}{WARN} || 0;
120 printf "INFO: %d(%d), ", $summary{$category}{INFO} || 0, $summary{$category}{duplicate}{INFO} || 0;
121 printf "DEBUG: %d(%d)", $summary{$category}{DEBUG} || 0, $summary{$category}{duplicate}{DEBUG} || 0;
124 # category has no duplicate log
127 printf "ALL: %d, ", $summary{$category}{all} || 0;
128 printf "FATAL: %d, ", $summary{$category}{FATAL} || 0;
129 printf "ERROR: %d, ", $summary{$category}{ERROR} || 0;
130 printf "WARN: %d, ", $summary{$category}{WARN} || 0;
131 printf "INFO: %d, ", $summary{$category}{INFO} || 0;
132 printf "DEBUG: %d ", $summary{$category}{DEBUG} || 0;