Thread Problem bei Textverarbeitung: Logfile -> JSON. Problem mit Gruppierung. (0 answers)
Opened by roooot at 2009-04-16 13:51

roooot
 2009-04-16 13:51
#120657 #120657
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo Leute.

Folgendes: Mein Logfile sieht so aus:
Code: (dl )
1
2
3
4
5
6
2009-04-16 13:13:31 - 141.30.***.*** - SID:991bc2f453756b37348835ec3d4d968b [NOTE] user_login - uid #1
2009-04-16 13:13:31 - 141.30.***.*** - SID:991bc2f453756b37348835ec3d4d968b [INFO] user_login_detail - nick chr
2009-04-16 13:13:39 - 141.30.***.*** - SID:991bc2f453756b37348835ec3d4d968b [NOTE] admin_login
2009-04-16 13:13:50 - 141.30.***.*** - SID:991bc2f453756b37348835ec3d4d968b [NOTE] admin_login_successful - uid #1
2009-04-16 13:13:50 - 141.30.***.*** - SID:991bc2f453756b37348835ec3d4d968b [NOTE] admin_home
2009-04-16 13:13:53 - 141.30.***.*** - SID:991bc2f453756b37348835ec3d4d968b [NOTE] admin_tools


Nun habe ich einen Code entwickelt um diesen zuerst nach Datum und anschließend nach SID zu gruppieren.
Das gibt folgendes JSON aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"log_data" : {
"2009-04-16" : {
"991bc2f453756b37348835ec3d4d968b" : [
{
"msg" : "user_login - uid #1",
"time" : "13:13:31",
"ip" : "141.30.***.***",
"type" : "NOTE"
},
{
"msg" : "user_login_detail - nick chr",
"time" : "13:13:31",
"ip" : "141.30.***.***",
"type" : "INFO"
},
{
"msg" : "admin_login",
"time" : "13:13:39",
"ip" : "141.30.***.***",
"type" : "NOTE"
},
{
"msg" : "admin_login_successful - uid #1",
"time" : "13:13:50",
"ip" : "141.30.***.***",
"type" : "NOTE"
},
{
"msg" : "admin_home",
"time" : "13:13:50",
"ip" : "141.30.***.***",
"type" : "NOTE"
},
{
"msg" : "admin_tools",
"time" : "13:13:53",
"ip" : "141.30.***.***",
"type" : "NOTE"
}
]
}
},

Nun stehe ich vor dem Problem, das die [INFO] Children von [NOTE] sind. Und daher sollen sie auch bei der Umwandlung zu einem JSON File als children Tag in den [NOTE] geschrieben werden, bei dem der zuvorgehende Tag eine ähnliche "msg" hat. Beispielsweise admin_login ist das Eltern Element zu admin_login_detail. Also soll bei admin_login ein children mit den admin_login_detail (können mehrere sein) mit gleichen Schema wie oben erstellt werden.

Nun verlange ich von euch keine Problemlösung, sondern Anregungen wie ich vorgehen kann. Vielen Dank im Vorraus




Hier mein Code, mit dem ich das obige Json erstelle:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    my %hash_sorted_by_day;
    for my $line (@logfile) {        
        my %tmphash;
        
        my ($logdate, $logtime, $logip, $logsid, $logtype, $logmsg) =            
            $line =~ 
            m/([\d-]{10})                   # date
                \s                          # _blank
                ([\d:]{8})                  # time
                \s-\s                       # _divider
                ([\d\.]+)                   # IP
                \s-\s                       # _divider
                SID:([a-zA-Z0-9]{32})       # sid
                \s                          # _blank
                \[([A-Z]+)\]                # LogType
                \s                          # _blank
                    (.*)/xms;               # message
                
        $tmphash{'time'} = $logtime;
        $tmphash{'ip'}   = $logip;
        $tmphash{'type'} = $logtype;
        $tmphash{'msg'}  = $logmsg;
        
        my @tmparray = defined $hash_sorted_by_day{$logdate}{$logsid} ?
                               @{$hash_sorted_by_day{$logdate}{$logsid}}
                     : ()
                     ;
        
        push (@tmparray, \%tmphash);
                
        $hash_sorted_by_day{$logdate}{$logsid} = \@tmparray;     
    };

Last edited: 2009-04-16 13:55:12 +0200 (CEST)
Viele Grüße :)

View full thread Problem bei Textverarbeitung: Logfile -> JSON. Problem mit Gruppierung.