热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpsyslog记录系统日志

使用php的syslog()函数调用本地的syslog服务,我的环境是ubuntu,所以记录下ubuntu下syslog的使用有关配置方法参考文章:http:www.cnblogs.com

使用php的syslog()函数调用本地的syslog服务,我的环境是ubuntu,所以记录下ubuntu下syslog的使用有关配置方法

参考文章:

http://www.cnblogs.com/wangkangluo1/archive/2012/05/30/2526011.html

http://blog.csdn.net/xinguan1267/article/details/7078481

首先写一个php测试文件

1 php
2 $ident = 'test';
3 $facility = LOG_LOCAL4;
4 $priority = LOG_INFO;
5 define_syslog_variables();
6 openlog($ident,NULL,$facility);
7 syslog($priority,'syslog test message generated in php programs');
8 closelog();

结果会在/var/log/syslog文件中增加如下一条记录。(默认的配置是会写到syslog文件中),php的openlog()和syslog()函数用法可以查看php手删,

openlog ( string $ident , int $option , int $facility )

syslog ( int $priority , string $message )

这里的facility和priority对应本地syslog服务的”消息来源“(facility)和”紧急程度“(priority),下面会讲到,这两参数通过syslog的配置文件决定log写入到哪个文件中。

这里讲下服务器端的syslog的使用。

ubuntu中syslog文件为/etc/rsyslog.conf,查看文件发现所有/etc/rsyslog.d文件夹下的.conf文件都属于配置文件,默认有两个文件,如下图:

20-ufw.conf 配置的是防火墙log

50-default.conf 则是其他默认的log配置,我的配置如下所示,截出其中一部分

 1 local4.info            /var/log/test.log
 2 *.info          /var/log/message
 3 auth,authpriv.*         /var/log/auth.log
 4 *.*;auth,authpriv.none      -/var/log/syslog
 5 #cron.*             /var/log/cron.log
 6 #daemon.*           -/var/log/daemon.log
 7 kern.*              -/var/log/kern.log
 8 #lpr.*              -/var/log/lpr.log
 9 mail.*              -/var/log/mail.log
10 #user.*             -/var/log/user.log
11 
12 #
13 # Logging for the mail system.  Split it up so that
14 # it is easy to write scripts to parse these files.
15 #
16 #mail.info          -/var/log/mail.info
17 #mail.warn          -/var/log/mail.warn
18 mail.err            /var/log/mail.err
19  
20 #
21 # Logging for INN news system.
22 #
23 news.crit           /var/log/news/news.crit
24 news.err            /var/log/news/news.err
25 news.notice         -/var/log/news/news.notice

第一行配置的就是刚刚那个php测试例子的,这样会将log写入到/var/log/test.log中,同时syslog文件中也会存在.

看下配置文件的语法格式

[消息类型(规则)]     [处理方案(日记文件)]     

注意:两者之间必须用一个或多外tab符分隔,如:local4.* (这里是一个或多个tab符)/var/log/test.log

消息类型是由”消息来源“(facility)和”紧急程度“(priority)构成,中间点号连接。

如前面syslog.conf文件中的news.crit表示来自news的”关键“状况。这里,news表示消息来源,crit表示关键状况。通配符*表示一切消息来源,如第二条规则:*.info,将info级以上(notice,warning, err, alert, emerg)(priority表)的所有消息发送到日记文件/var/log/messages。而测试程序中,调用syslog函数时指定的priority是LOG_INFO,facility是LOG_LOCAL4,根据facilitypriority对应的关系,对应的消息类型规则是local4.info,包含在第一条规则中,所以会写到/var/log/test.log文件中,同时因为符合*.info规则和*.*规则(*.*为匹配所有规则),所以同时还会写到syslog和message文件中。

下面列出facility和priority的对应关系:/usr/include/i386-linux-gun/sys/syslog.h文件中查看

syslog支持的facility如下:facility参数通常在openlog()中设置,如测试的openlog($ident,NULL,'LOG_LOCAL4');

/* facility codes */
 93 #define LOG_KERN    (0<<3)  /* kernel messages */
 94 #define LOG_USER    (1<<3)  /* random user-level messages */
 95 #define LOG_MAIL    (2<<3)  /* mail system */
 96 #define LOG_DAEMON  (3<<3)  /* system daemons */
 97 #define LOG_AUTH    (4<<3)  /* security/authorization messages */
 98 #define LOG_SYSLOG  (5<<3)  /* messages generated internally by syslogd */
 99 #define LOG_LPR     (6<<3)  /* line printer subsystem */
100 #define LOG_NEWS    (7<<3)  /* network news subsystem */
101 #define LOG_UUCP    (8<<3)  /* UUCP subsystem */
102 #define LOG_CRON    (9<<3)  /* clock daemon */
103 #define LOG_AUTHPRIV    (10<<3) /* security/authorization messages (private) */
104 #define LOG_FTP     (11<<3) /* ftp daemon */
105 
106     /* other codes through 15 reserved for system use */
107 #define LOG_LOCAL0  (16<<3) /* reserved for local use */
108 #define LOG_LOCAL1  (17<<3) /* reserved for local use */
109 #define LOG_LOCAL2  (18<<3) /* reserved for local use */
110 #define LOG_LOCAL3  (19<<3) /* reserved for local use */
111 #define LOG_LOCAL4  (20<<3) /* reserved for local use */
112 #define LOG_LOCAL5  (21<<3) /* reserved for local use */
113 #define LOG_LOCAL6  (22<<3) /* reserved for local use */
114 #define LOG_LOCAL7  (23<<3) /* reserved for local use */
115 
116 #define LOG_NFACILITIES 24  /* current number of facilities */
117 #define LOG_FACMASK 0x03f8  /* mask to extract facility part */
118                 /* facility of pri */
119 #define LOG_FAC(p)  (((p) & LOG_FACMASK) >> 3)

facility的ID(上面对应的数值)与名字的对应关系如下:

122 CODE facilitynames[] =
123   {
124     { "auth", LOG_AUTH },
125     { "authpriv", LOG_AUTHPRIV },
126     { "cron", LOG_CRON },
127     { "daemon", LOG_DAEMON },
128     { "ftp", LOG_FTP },
129     { "kern", LOG_KERN },
130     { "lpr", LOG_LPR },
131     { "mail", LOG_MAIL },
132     { "mark", INTERNAL_MARK },      /* INTERNAL */
133     { "news", LOG_NEWS },
134     { "security", LOG_AUTH },       /* DEPRECATED */
135     { "syslog", LOG_SYSLOG },
136     { "user", LOG_USER },
137     { "uucp", LOG_UUCP },
138     { "local0", LOG_LOCAL0 },
139     { "local1", LOG_LOCAL1 },
140     { "local2", LOG_LOCAL2 },
141     { "local3", LOG_LOCAL3 },
142     { "local4", LOG_LOCAL4 },
143     { "local5", LOG_LOCAL5 },
144     { "local6", LOG_LOCAL6 },
145     { "local7", LOG_LOCAL7 },
146     { NULL, -1 }
147   };

这个对应关系作用是是将syslog系统调用中facility ID和syslog的配置文件(50-default.conf)选项对应起来。facility的作用是指明调用syslog应用的类型。

syslog支持的priority如下:

 51 #define LOG_EMERG   0   /* system is unusable */
 52 #define LOG_ALERT   1   /* action must be taken immediately */
 53 #define LOG_CRIT    2   /* critical conditions */
 54 #define LOG_ERR     3   /* error conditions */
 55 #define LOG_WARNING 4   /* warning conditions */
 56 #define LOG_NOTICE  5   /* normal but significant condition */
 57 #define LOG_INFO    6   /* informational */
 58 #define LOG_DEBUG   7   /* debug-level messages */

priority的ID(上面对应的数值)与名字的对应关系如下:

 74 CODE prioritynames[] =
 75   {
 76     { "alert", LOG_ALERT },
 77     { "crit", LOG_CRIT },
 78     { "debug", LOG_DEBUG },
 79     { "emerg", LOG_EMERG },
 80     { "err", LOG_ERR },
 81     { "error", LOG_ERR },       /* DEPRECATED */
 82     { "info", LOG_INFO },
 83     { "none", INTERNAL_NOPRI },     /* INTERNAL */
 84     { "notice", LOG_NOTICE },
 85     { "panic", LOG_EMERG },     /* DEPRECATED */
 86     { "warn", LOG_WARNING },        /* DEPRECATED */
 87     { "warning", LOG_WARNING },
 88     { NULL, -1 }
 89   };

priority的作用是指明日记记录的优先级,也可以理解成记录时间的严重程度。在实际使用中,syslog函数中的priority参数实际上是前面提到的facility和priority的组合,通过与操作。

通过上面列出的对应关系,我们可以看出测试程序中使用的facility和priority对应的是配置文件中的local4.info项及其他符合的通配的项。


推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
author-avatar
博菡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有