72 function Log_win($name, $ident =
'', $conf = array(),
75 $this->_id = md5(microtime());
76 $this->_name = str_replace(
' ',
'_', $name);
77 $this->_ident = $ident;
80 if (isset($conf[
'title'])) {
81 $this->_title = $conf[
'title'];
83 if (isset($conf[
'styles']) && is_array($conf[
'styles'])) {
84 $this->_styles = $conf[
'styles'];
86 if (isset($conf[
'colors']) && is_array($conf[
'colors'])) {
87 foreach ($conf[
'colors'] as $level => $color) {
88 $this->_styles[$level] .=
"color: $color;";
92 register_shutdown_function(array(&$this,
'_Log_win'));
100 if ($this->_opened || (count($this->_buffer) > 0)) {
115 if (!$this->_opened) {
119 if (!empty($this->_ident)) {
120 $identHeader =
"$win.document.writeln('<th>Ident</th>')";
126<script language=
"JavaScript">
127$win = window.open(
'',
'{$this->_name}',
'toolbar=no,scrollbars,width=600,height=400');
128$win.document.writeln(
'<html>');
129$win.document.writeln(
'<head>');
130$win.document.writeln(
'<title>{$this->_title}</title>');
131$win.document.writeln(
'<style type="text/css">');
132$win.document.writeln(
'body { font-family: monospace; font-size: 8pt; }');
133$win.document.writeln(
'td,th { font-size: 8pt; }');
134$win.document.writeln(
'td,th { border-bottom: #999999 solid 1px; }');
135$win.document.writeln(
'td,th { border-right: #999999 solid 1px; }');
136$win.document.writeln(
'tr { text-align: left; vertical-align: top; }');
137$win.document.writeln(
'td.l0 { $styles[0] }');
138$win.document.writeln(
'td.l1 { $styles[1] }');
139$win.document.writeln(
'td.l2 { $styles[2] }');
140$win.document.writeln(
'td.l3 { $styles[3] }');
141$win.document.writeln(
'td.l4 { $styles[4] }');
142$win.document.writeln(
'td.l5 { $styles[5] }');
143$win.document.writeln(
'td.l6 { $styles[6] }');
144$win.document.writeln(
'td.l7 { $styles[7] }');
145$win.document.writeln(
'</style>');
146$win.document.writeln(
'<script type="text/javascript">');
147$win.document.writeln(
'function scroll() {');
148$win.document.writeln(
' body = document.getElementById("{$this->_name}");');
149$win.document.writeln(
' body.scrollTop = body.scrollHeight;');
150$win.document.writeln(
'}');
151$win.document.writeln(
'<\/script>');
152$win.document.writeln(
'</head>');
153$win.document.writeln(
'<body id="{$this->_name}" onclick="scroll()">');
154$win.document.writeln(
'<table border="0" cellpadding="2" cellspacing="0">');
155$win.document.writeln(
'<tr><th>Time</th>');
157$win.document.writeln(
'<th>Priority</th><th width="100%">Message</th></tr>');
160 $this->_opened =
true;
179 if (!$this->_opened && (count($this->_buffer) > 0)) {
183 if ($this->_opened) {
187 $this->_opened =
false;
190 return ($this->_opened ===
false);
201 foreach ($this->_buffer as $line) {
202 echo
"<script language='JavaScript'>\n";
203 echo
"$win.document.writeln('" . addslashes($line) .
"');\n";
204 echo
"self.focus();\n";
209 $this->_buffer = array();
222 $this->_buffer[] = $line;
225 if (!headers_sent()) {
230 if (!$this->_opened && !$this->
open()) {
250 function log($message, $priority =
null)
253 if ($priority ===
null) {
264 $message = preg_replace(
'/\r\n|\n|\r/',
'<br />', $message);
266 list($usec, $sec) = explode(
' ', microtime());
270 $line .= sprintf(
'<td>%s.%s</td>',
271 strftime(
'%H:%M:%S', $sec), substr($usec, 2, 2));
272 if (!empty($this->_ident)) {
273 $line .=
'<td>' . $this->_ident .
'</td>';
276 $line .= sprintf(
'<td class="l%d">%s</td>', $priority, $message);
281 $this->
_announce(array(
'priority' => $priority,
'message' => $message));
log($message, $priority=null)
Logs $message to the output window.
close()
Closes the output stream if it is open.
_drainBuffer()
Writes the contents of the output buffer to the output window.
Log_win($name, $ident='', $conf=array(), $level=PEAR_LOG_DEBUG)
Constructs a new Log_win object.
open()
The first time open() is called, it will open a new browser window and prepare it for output.
_writeln($line)
Writes a single line of text to the output buffer.
UPTO($priority)
Calculate the log mask for all priorities up to the given priority.
_isMasked($priority)
Check if the given priority is included in the current level mask.
priorityToString($priority)
Returns the string representation of a PEAR_LOG_* integer constant.
_announce($event)
Informs each registered observer instance that a new message has been logged.
_extractMessage($message)
Returns the string representation of the message data.
The Log:: class implements both an abstraction for various logging mechanisms and the Subject end of ...