1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12:
13:
14: 15: 16: 17: 18: 19:
20: class DibiFileLogger extends DibiObject
21: {
22:
23: public $file;
24:
25:
26: public $filter;
27:
28:
29:
30: public function __construct($file, $filter = NULL)
31: {
32: $this->file = $file;
33: $this->filter = $filter ? (int) $filter : DibiEvent::QUERY;
34: }
35:
36:
37:
38: 39: 40: 41:
42: public function logEvent(DibiEvent $event)
43: {
44: if (($event->type & $this->filter) === 0) {
45: return;
46: }
47:
48: $handle = fopen($this->file, 'a');
49: if (!$handle) return;
50: flock($handle, LOCK_EX);
51:
52: if ($event->result instanceof Exception) {
53: $message = $event->result->getMessage();
54: if ($code = $event->result->getCode()) {
55: $message = "[$code] $message";
56: }
57: fwrite($handle,
58: "ERROR: $message"
59: . "\n-- SQL: " . $event->sql
60: . "\n-- driver: " . $event->connection->getConfig('driver') . '/' . $event->connection->getConfig('name')
61: . ";\n-- " . date('Y-m-d H:i:s')
62: . "\n\n"
63: );
64: } else {
65: fwrite($handle,
66: "OK: " . $event->sql
67: . ($event->count ? ";\n-- rows: " . $event->count : '')
68: . "\n-- takes: " . sprintf('%0.3f', $event->time * 1000) . ' ms'
69: . "\n-- source: " . implode(':', $event->source)
70: . "\n-- driver: " . $event->connection->getConfig('driver') . '/' . $event->connection->getConfig('name')
71: . "\n-- " . date('Y-m-d H:i:s')
72: . "\n\n"
73: );
74: }
75: fclose($handle);
76: }
77:
78: }
79: