kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 ogward
ogward
Question

Mengurai file log apache

Saya baru saja mulai belajar Python dan ingin membaca file log Apache dan menempatkan bagian-bagian dari setiap baris ke dalam daftar yang berbeda.

baris dari file tersebut

172.16.0.3 - - [25/Sep/2002:14:04:19 +0200] "GET / HTTP/1.1" 401 - "" "Mozilla/5.0 (X11;U;Linux i686;en-US;rv:1.1) Gecko/20020827"

menurut situs web Apache formatnya adalah

%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\

Saya dapat membuka file dan membacanya apa adanya, tetapi saya tidak tahu cara membuatnya terbaca dalam format tersebut sehingga saya dapat memasukkan setiap bagian ke dalam daftar.

33 2012-09-22T14:15:29+00:00 3
 georg
georg
Pertanyaan edit 22 September 2012 в 2:58
Pemrograman
python
file-io
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
Solution / Answer
David Robinson
David Robinson
22 September 2012 в 2:25
2012-09-22T14:25:18+00:00
Lebih
Sumber
Sunting
#17273257

Ini adalah pekerjaan untuk ekspresi reguler.

Sebagai contoh:

line = '172.16.0.3 - - [25/Sep/2002:14:04:19 +0200] "GET / HTTP/1.1" 401 - "" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"'
regex = '([(\d\.)]+) - - \[(.*?)\] "(.*?)" (\d+) - "(.*?)" "(.*?)"'

import re
print re.match(regex, line).groups()

Keluarannya adalah sebuah tuple dengan 6 buah informasi dari baris tersebut (khususnya, kelompok-kelompok di dalam tanda kurung pada pola tersebut):

('172.16.0.3', '25/Sep/2002:14:04:19 +0200', 'GET / HTTP/1.1', '401', '', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827')
38
0
 georg
georg
22 September 2012 в 2:54
2012-09-22T14:54:36+00:00
Lebih
Sumber
Sunting
#17273258

Gunakan ekspresi reguler untuk membagi baris menjadi "token" yang terpisah:

>>> row = """172.16.0.3 - - [25/Sep/2002:14:04:19 +0200] "GET / HTTP/1.1" 401 - "" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827" """
>>> import re
>>> map(''.join, re.findall(r'\"(.*?)\"|\[(.*?)\]|(\S+)', row))
['172.16.0.3', '-', '-', '25/Sep/2002:14:04:19 +0200', 'GET / HTTP/1.1', '401', '-', '', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827']

Solusi lain adalah dengan menggunakan alat khusus, misalnya http://pypi.python.org/pypi/pylogsparser/0.4

12
0
 Rory
Rory
5 November 2014 в 9:27
2014-11-05T09:27:36+00:00
Lebih
Sumber
Sunting
#17273259

Saya telah membuat sebuah pustaka python yang melakukan hal tersebut: apache-log-parser.

>>> import apache_log_parser
 >>> line_parser = apache_log_parser.make_parser("%h <<%P>> %t %Dus \"%r\" %>s %b  \"%{Referer}i\" \"%{User-Agent}i\" %l %u")
>>> log_line_data = line_parser('127.0.0.1 <<6113>> [16/Aug/2013:15:45:34 +0000] 1966093us "GET / HTTP/1.1" 200 3478  "https://example.com/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18)" - -')
>>> pprint(log_line_data)
{'pid': '6113',
 'remote_host': '127.0.0.1',
 'remote_logname': '-',
 'remote_user': '',
 'request_first_line': 'GET / HTTP/1.1',
 'request_header_referer': 'https://example.com/',
 'request_header_user_agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18)',
 'response_bytes_clf': '3478',
 'status': '200',
 'time_received': '[16/Aug/2013:15:45:34 +0000]',
 'time_us': '1966093'}
GitHub - amandasaurus/apache-log-parser: Parses log lines from an apache log
Parses log lines from an apache log. Contribute to amandasaurus/apache-log-parser development by creating an account on GitHub.
github.com
10
0
Related communities 6
Python Indonesia
Python Indonesia
25 937 pengguna
Programmer Python Indonesia. Group ini dikelola oleh sejumlah admin. Baca pesan tersemat / pinned message: https://t.me/pythonID/217588
Buka telegram
Indonesian Python Warriors
Indonesian Python Warriors
1 437 pengguna
Di grup ini tidak ada kewajiban untuk menggunakan username dan foto. Yang tidak boleh adalah spamming. Gak boleh baper, kalau nanya yang bener, eror jangan difoto pake HP, gunakan screenshot, code copas ke dpaste.org lalu share link ke sini.
Buka telegram
Python-ID Jogja
Python-ID Jogja
949 pengguna
Buka telegram
Python Newbie Indonesia
Python Newbie Indonesia
384 pengguna
Peraturan grup Python Newbie 🌻Dilarang spam 🌻Dilarang menggunakan bahasa kasar 🌻Dilarang beriklan di grup tanpa seizin admin Beberapa video dasar python dapat diliat melalui channel youtube juan aditya Jangan lupa untuk subscribe ya🙏
Buka telegram
BASIC PYTHON INDONESIA
BASIC PYTHON INDONESIA
342 pengguna
Buka telegram
PythonWealth Indonesia 🇮🇩
PythonWealth Indonesia 🇮🇩
18 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
工藤 芳則
Terdaftar 6 hari yang lalu
2
Ирина Беляева
Terdaftar 1 minggu yang lalu
3
Darya Arsenyeva
Terdaftar 1 minggu yang lalu
4
anyta nuam-nuam (LapuSiK)
Terdaftar 1 minggu yang lalu
5
Shuhratjon Imomkulov
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi