1<?php
2
3namespace Psr\Log;
4
5/**
6 * This is a simple Logger trait that classes unable to extend AbstractLogger
7 * (because they extend another class, etc) can include.
8 *
9 * It simply delegates all log-level-specific methods to the `log` method to
10 * reduce boilerplate code that a simple Logger that does the same thing with
11 * messages regardless of the error level has to implement.
12 */
13trait LoggerTrait
14{
15    /**
16     * System is unusable.
17     *
18     * @param string $message
19     * @param array  $context
20     *
21     * @return null
22     */
23    public function emergency($message, array $context = array())
24    {
25        $this->log(LogLevel::EMERGENCY, $message, $context);
26    }
27
28    /**
29     * Action must be taken immediately.
30     *
31     * Example: Entire website down, database unavailable, etc. This should
32     * trigger the SMS alerts and wake you up.
33     *
34     * @param string $message
35     * @param array  $context
36     *
37     * @return null
38     */
39    public function alert($message, array $context = array())
40    {
41        $this->log(LogLevel::ALERT, $message, $context);
42    }
43
44    /**
45     * Critical conditions.
46     *
47     * Example: Application component unavailable, unexpected exception.
48     *
49     * @param string $message
50     * @param array  $context
51     *
52     * @return null
53     */
54    public function critical($message, array $context = array())
55    {
56        $this->log(LogLevel::CRITICAL, $message, $context);
57    }
58
59    /**
60     * Runtime errors that do not require immediate action but should typically
61     * be logged and monitored.
62     *
63     * @param string $message
64     * @param array  $context
65     *
66     * @return null
67     */
68    public function error($message, array $context = array())
69    {
70        $this->log(LogLevel::ERROR, $message, $context);
71    }
72
73    /**
74     * Exceptional occurrences that are not errors.
75     *
76     * Example: Use of deprecated APIs, poor use of an API, undesirable things
77     * that are not necessarily wrong.
78     *
79     * @param string $message
80     * @param array  $context
81     *
82     * @return null
83     */
84    public function warning($message, array $context = array())
85    {
86        $this->log(LogLevel::WARNING, $message, $context);
87    }
88
89    /**
90     * Normal but significant events.
91     *
92     * @param string $message
93     * @param array  $context
94     *
95     * @return null
96     */
97    public function notice($message, array $context = array())
98    {
99        $this->log(LogLevel::NOTICE, $message, $context);
100    }
101
102    /**
103     * Interesting events.
104     *
105     * Example: User logs in, SQL logs.
106     *
107     * @param string $message
108     * @param array  $context
109     *
110     * @return null
111     */
112    public function info($message, array $context = array())
113    {
114        $this->log(LogLevel::INFO, $message, $context);
115    }
116
117    /**
118     * Detailed debug information.
119     *
120     * @param string $message
121     * @param array  $context
122     *
123     * @return null
124     */
125    public function debug($message, array $context = array())
126    {
127        $this->log(LogLevel::DEBUG, $message, $context);
128    }
129
130    /**
131     * Logs with an arbitrary level.
132     *
133     * @param mixed  $level
134     * @param string $message
135     * @param array  $context
136     *
137     * @return null
138     */
139    abstract public function log($level, $message, array $context = array());
140}
141