PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Newt> <네트워크
Last updated: Sun, 25 Nov 2007

view this page in

syslog

(PHP 4, PHP 5)

syslog — 시스템 로그 메시지를 생성합니다.

Description

int syslog ( int $priority , string $message )

syslog()는 시스템 기록자에 의해 배분이 될 로그 메시지를 생성합니다. priority 는 다음 장에서 주어진 값에 대한 난이도와 수준의 조합입니다. 남겨진 인수는 현재의 errno 값에 대응이 되는 에러 메시지 문자열(strerror)은 %m의 두개 문자로 대치가 되고 나머지는 보내지는 메시지 입니다.

syslog() 우선순위 (역순정렬)
Constant Description
LOG_EMERG 시스템을 사용할 수 없습니다.
LOG_ALERT 즉시 수행해야 할 행동
LOG_CRIT 위험한 상태
LOG_ERR 에러 상태
LOG_WARNING 경고 상태
LOG_NOTICE 일반적이지만 중요한 상태
LOG_INFO 정보 메시지
LOG_DEBUG 디버그 수준 메시지

Example#1 syslog()의 사용

<?php
define_syslog_variables
();
// 프로세스 ID를 포함하고 있으며 로그를 표준 에러로 보내는 syslog를 열고
// 사용자에 의해 정의된 logging 메카니즘을 사용합니다.
openlog("myScripLog"LOG_PID LOG_PERRORLOG_LOCAL0);

// 코드가 들어갑니다.

if (authorized_client()) {
    
// 무슨 일인가를 수행합니다.

} else {
    
// 인증되지 않은 사용자!
    // 로그를 시도합니다.
    
$access date("Y/m/d H:i:s");
    
syslog(LOG_WARNING,"인증되지 않은 사용자: $access $REMOTE_ADDR ($HTTP_USER_AGENT)");
}

closelog();
?>
사용자가 정의한 로그 핸들러를 설정하기 위한 정보는 syslog.conf (5) 유닉스의 기능설명(manual) 페이지를 보세요. syslog 난이도와 옵션에 관해서 정보를 좀 더 알고 싶을 때는 syslog (3) 유닉스 머신의 man 페이지에서 찾아 볼 수 있습니다.

Windows NT에서 syslog 서비스는 이벤트 로그로 에뮬레이트 되어 사용됩니다.

참조: define_syslog_variables(), openlog(), closelog().



Newt> <네트워크
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
syslog
james dot ellis at gmail dot com
02-Dec-2007 08:26
If anyone is wondering why their log messages are appearing in multiple log files, here is one answer applying to *nix systems:

If your syslog.conf looks like this (assuming you use LOG_LOCAL0 for web app logging) :

local0.info    /var/log/web/info.log

This will collect *all* messages of LOG_INFO level and higher, i.e everything except debug messages

Try this instead to ensure that only messages of the named log level go into the relevant log file:

local0.=info    /var/log/web/info.log

Additionally, you may like to add this to ensure your messages don't end up in generic log files like "messages"  "all" "syslog" and "debug":

local0.none    /var/log/messages
local0.none    /var/log/debug
etc

saves disk space among other things - more at "man syslog.conf"
helly at php dot net
13-Apr-2007 05:49
If you are using syslog-ng and want errors send to syslog then use ini setting "error_log = syslog" and add something like the following to your syslog-ng.conf:

destination php { file("/var/log/php.log" owner(root) group(devel) perm(0620)); };
log { source(src); filter(f_php); destination(php); };
adam _at_ lockdownnetworks _dot_ com
10-Apr-2007 06:32
Be aware when using syslog() that if you set the timezone of environment to be something other than the standard, syslog() may log the time to the log(s) with the wrong time zone information. For example:

<?php

openlog
('mylog', LOG_PID | LOG_ODELAY,LOG_LOCAL4);

putenv('TZ=UTC');
syslog(LOG_INFO, 'UTC Log line');

putenv('TZ=US/Pacific');
syslog(LOG_INFO, 'US/Pacific Log line');

closelog();

?>

Viewing the /usr/log/messages log will display these two lines:

Apr 11 01:25:39 hostname mylog[1400]: UTC Log line
Apr 10 18:25:39 hostname mylog[1400]: US/Pacific Log line

Adam.
Torsten
23-Apr-2004 06:27
I had a problem trying to issue a syslog message with IIS 5.1 under Windows XP. The function call seemed to succeed, but the event viewer showed that no entry was made.
Finally I found out that the user account used for the webserver (IUSR_<Computername>) did not have enough permissions to issue syslog alerts. I changed this by adding this user to the Users group instead of only Guest.
daniele dot patoner at biblio dot unitn dot it
06-Nov-2003 11:00
This work for me, to redirect  logs to a separate syslog file

put this line in your /etc/syslog.conf :

local0.debug   /var/log/php.log

Then restart syslogd:

/etc/init.d/syslog restart

php example:

<?php
define_syslog_variables
();
openlog("TextLog", LOG_PID, LOG_LOCAL0);

$data = date("Y/m/d H:i:s");
syslog(LOG_DEBUG,"Messagge: $data");

closelog();
?>
gregj at pdxperts dot com
28-Jul-2003 05:05
The message string sent to the log file is limited to 500 characters.
monte at ispi dot net
03-Jul-2003 11:05
If you have php.ini setup to send PHP errors to syslog, they will all get dumped into /var/log/messages (at least it does with RedHat 9 by default). I wanted to figure out how to get PHP errors to go to their own syslog file.

After some trial and error, I figured out what facility and priority PHP uses, which is "user.notice". So, to get your PHP errors going to a separate syslog file, put this line in your /etc/syslog.conf :

user.notice   /var/log/php.log

Then restart syslogd:

/etc/init.d/syslog restart

Why PHP uses "user" as the facility I'm not sure, probably because it's the only one that works under Windows?

Monte
nospam \100 jraxis com (that's right!)
31-Mar-2002 08:32
This *does* actually goto the system log as configured in /etc/syslog.conf (such as /var/log/messages), it doesn't goto Apache's ErrorLog (such as /var/log/httpd/error_log). At least under my Debian Potato with Apache 1.3.23.

Use error_log() to be sure it gets into Apache's ErrorLog.
dpreece at paradise dot net dot nz
29-Jan-2002 04:08
To set up a custom log file via the syslog daemon (FreeBSD in this case)...

Add to /etc/syslog.conf a line that says all errors from the httpd process are to go to a file called (for example) /var/log/httpd-php.log

!httpd
*.*   {tab}   /var/log/httpd-php.log

Note the tab, being a tab character! Next create a blank file to be written to. I'm sure there are 1e+6 ways to do this, but I choose

# cat > httpd-php.log << EOF
? EOF

Finally find your syslog daemon and send it a sighup to inform it of the change:

# ps ax | grep syslogd
  133  ??  Ss     0:07.23 syslogd -s
# kill -1 133

Et voila! Php syslog calls will now arrive in /var/log/httpd-php.log
mavetju at chello dot nl
22-Jan-2001 06:11
With FreeBSD I can use: syslog(LOG_INFO,"test");

BSD/OS does not support this, I had to use the literal values for the priority (158: local3.info):
syslog(158,"test");
gherson at snet dot net
20-Dec-2000 01:09
Example of where to look for syslog's output:   /var/log/httpd/access_log
(on Red Hat Linux Secure Server v6.2).
rcgraves+php at brandeis dot edu
17-Feb-2000 12:51
For the-header-file-enabled:

man 3 syslog defines the priorities, but not the integer values. For that you'll need to read your system header file.

Let's suppose I want to log an informational message in the mail log (which happens to be true). The man page tells me I want LOG_MAIL|LOG_INFO. So I look in /usr/include/sys/syslog.h and find (this happens to be Linux, your system could be different):

#define LOG_INFO        6       /* informational */
#define LOG_MAIL        (2<<3)  /* mail system */

2<<3 means shift 3 bits left, which means multiply by 8. So I want 2*8 + 6 = 22. syslog(22,"this message will appear in the mail log"); And indeed it does.
bb at lb-data dot co dot at
08-Sep-1999 03:54
In Windows NT, use the following values of priority:
1 = error,
6 = info

Newt> <네트워크
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites