diff --git a/src/log_watcher.rs b/src/log_watcher.rs
index 9c2b2d0..40641c1 100644
--- a/src/log_watcher.rs
+++ b/src/log_watcher.rs
@@ -6,7 +6,7 @@ use std::path::PathBuf;
 use linemux::{Line, MuxedLines};
 use tokio::sync::mpsc::UnboundedSender;
 
-use crate::ApacheMetrics;
+use crate::{ApacheMetrics, log_parser};
 use crate::log_file_pattern::LogFilePath;
 
 #[derive(Copy, Clone, PartialEq)]
@@ -77,22 +77,33 @@ impl<'a> LogWatcher<'a> {
 		}
 	}
 	
-	fn handle_line(&mut self, event: Line, metrics: &ApacheMetrics) {
-		match self.files.get(event.source()) {
-			Some(metadata) => {
-				let label = metadata.label;
-				let (kind, family) = match metadata.kind {
-					LogFileKind::Access => ("access log", &metrics.requests_total),
-					LogFileKind::Error => ("error log", &metrics.errors_total),
-				};
-				
-				println!("[LogWatcher] Received {} line from \"{}\": {}", kind, label, event.line());
-				family.get_or_create(&metadata.get_label_set()).inc();
+	fn handle_line(&self, event: Line, metrics: &ApacheMetrics) {
+		if let Some(file) = self.files.get(event.source()) {
+			match file.kind {
+				LogFileKind::Access => self.handle_access_log_line(event.line(), file, metrics),
+				LogFileKind::Error => self.handle_error_log_line(event.line(), file, metrics),
 			}
-			None => {
-				println!("[LogWatcher] Received line from unknown file: {}", event.source().display());
+		} else {
+			println!("[LogWatcher] Received line from unknown file: {}", event.source().display());
+		}
+	}
+	
+	fn handle_access_log_line(&self, line: &str, file: &LogFileInfo, metrics: &ApacheMetrics) {
+		match log_parser::AccessLogLineParts::parse(line) {
+			Ok(parts) => {
+				println!("[LogWatcher] Received access log line from \"{}\": {}", file.label, parts)
+			}
+			Err(err) => {
+				println!("[LogWatcher] Received access log line from \"{}\" with invalid format ({:?}): {}", file.label, err, line)
 			}
 		}
+		
+		metrics.requests_total.get_or_create(&file.get_label_set()).inc();
+	}
+	
+	fn handle_error_log_line(&self, line: &str, file: &LogFileInfo, metrics: &ApacheMetrics) {
+		println!("[LogWatcher] Received error log line from \"{}\": {}", file.label, line);
+		metrics.errors_total.get_or_create(&file.get_label_set()).inc();
 	}
 }