log4php使用手記
Apache log4php™ is a versatile logging framework for PHP.
Feature highlights:
- Configuration through XML, properties or PHP files
- Various logging destinations, including:
- Console (stdout, stderr)
- Files (including daily and rolling files)
- Databases
- Sockets
- Syslog
- Several built-in log message formats, including:
- HTML
- XML
- User defined pattern
- Nested (NDC) and Mapped (MDC) Diagnostic Contexts.
2009年log4php版推出2.0.0版本後,很長一段時間沒有更新,最近更新到了2.1.0版本。下載地址在http://logging.apache.com。2.1.0版本支援了對php的pear包的支援,可以將log4php功能整合到pear包中。
我們下載的包解壓,將srcmain下的php目錄拷貝到web文件目錄,並重新命名為log4php。
寫一個簡單的測試例子:
- ?php
- include(`log4php/Logger.php`);
- $logger = Logger::getLogger(“main”);
- $logger–>info(“foo”);
- $logger–>warn(“bar”);
- ?>
在控制檯(windows下用cmd命令執行)會看到如下的輸出:
[quote]07/31/11 08:26:12,043 [496] INFO main – foo
07/31/11 08:26:12,047 [496] WARN main – bar[/quote]
注意:你用瀏覽器開啟,是看不到輸出的,因為log4php的預設配置輸出是到控制檯。
通過配置檔案配置日誌的輸出,log4php.xml如下:
- ?xml version=“1.0” encoding=“UTF-8”?>
- log4php:configuration xmlns:log4php=“http://logging.apache.org/log4php/”>
- appender name=“myAppender” class=“LoggerAppenderFile”> !– 1 —>
- param name=“file” value=“myLog.log”/> !– 2 —>
- /appender>
- root>
- level value=“WARN” /> !– 3 —>
- appender_ref ref=“myAppender” /> !– 4 —>
- /root>
- /log4php:configuration>
配置檔案說明:
1、建立一個LoggerAppenderFile,用於日誌檔案輸出。
2、檔案引數,用於日誌輸出的檔案配置。
3、設定root的級別為WARN,低於WARN的日誌不會輸出。
4、root的日誌輸出連線到myAppender上。
測試程式如下:
- ?php
- // Insert the path where you unpacked log4php
- include(`log4php/Logger.php`);
- // Tell log4php to use our configuration file.
- Logger::configure(`log4php.xml`);
- // Fetch a logger, it will inherit settings from the root logger
- $log = Logger::getLogger(`myLogger`);
- // Start logging
- $log–>trace(“My first message.”); // Not logged because TRACE
- $log–>debug(“My second message.”); // Not logged because DEBUG
- $log–>info(“My third message.”); // Not logged because INFO
- $log–>warn(“My fourth message.”); // Logged because WARN >= WARN
- $log–>error(“My fifth message.”); // Logged because ERROR >= WARN
- $log–>fatal(“My sixth message.”); // Logged because FATAL >= WARN
- ?>
我們看到myLog.log檔案中輸出如下資訊:
WARN – My fourth message.
ERROR – My fifth message.
FATAL – My sixth message.
比WARN級別低的日誌沒有輸出。
更高階一點的配置:
- ?xml version=“1.0” encoding=“UTF-8”?>
- log4php:configuration xmlns:log4php=“http://logging.apache.org/log4php/”>
- appender name=“myConsoleAppender” class=“LoggerAppenderConsole” />
- appender name=“myFileAppender” class=“LoggerAppenderFile”>
- layout class=“LoggerLayoutTTCC” />
- param name=“file” value=“myLog.log” />
- /appender>
- logger name=“Foo”>
- appender_ref ref=“myFileAppender” />
- /logger>
- root>
- level value=“DEBUG” />
- appender_ref ref=“myConsoleAppender” />
- /root>
- /log4php:configuration>
在這個配置檔案中,
named loggers
using layouts
best practices in object-oriented programming
通過測試檔案如下:
- ?php
- include(`log4php/Logger.php`);
- Logger::configure(`D:log4php.xml`);
- /**
- * This is a classic pattern: using one logger object per class.
- */
- class Foo
- {
- /** Holds the Logger. */
- private $log;
- /** Logger is instantiated in the constructor. */
- public function __construct()
- {
- // The __CLASS__ constant holds the class name, in our case “Foo”.
- // Therefore this creates a logger named “Foo” (which we configured in the config file)
- $this–>log = Logger::getLogger(__CLASS__);
- }
- /** Logger can be used from any member method. */
- public function go()
- {
- $this–>log–>info(“We have liftoff.”);
- }
- }
- $foo = new Foo();
- $foo–>go();
- ?>
下面的資訊將會輸出在控制檯:
INFO – We have liftoff.
下面的資訊將輸出在myLog.log檔案中:
注意檔案輸出的不同,因為在檔案appender中使用了LoggerLayoutTTCC這個Layout。
PS:在Linux下要注意輸出日誌的目錄,apache使用者有許可權寫入。
還可以採用properties的形式配置,或者php檔案。更多的資料可以參照apache官方網站。http://logging.apache.org/log4php/docs/introduction.html
相關文章
- taro使用手記
- TcpDump使用手冊TCP
- MyBatis 使用手冊MyBatis
- Zabbix 使用手冊
- Anaconda使用手冊
- Mybatis應用手冊MyBatis
- sqlmap使用手冊SQL
- 儀器使用手冊
- git 基本使用手冊Git
- Cobra框架使用手冊框架
- 《相片》:用手頭的相機,記錄5個刻骨銘心的故事
- 記一次百度使我饒彎路
- 帶著閘道器去旅行---安全內網穿透工具smarGate使用手記內網穿透
- Room Database完全使用手冊OOMDatabase
- MongoDB和pymongo自用手冊MongoDB
- 【C#】CsvHelper 使用手冊C#
- PerfDog WEB端使用手冊Web
- vim-plug使用手冊
- 【C#】AutoMapper 使用手冊C#APP
- 前端常用手寫程式碼前端
- Gerrit和Jenkins使用手冊Jenkins
- Carbon中文使用手冊(下)
- Linux parallel 命令使用手冊LinuxParallel
- ThreadLocal 使用手冊 | 按需收藏thread
- Git 快速使用手冊(二)Git
- Cobalt strike3.0使用手冊
- 《Redis 使用手冊》- 字串(PHP 版本)Redis字串PHP
- BeautifulSoup使用手冊(查詢篇)
- ES6 完全使用手冊
- MySQL DBA 常用手冊小結MySql
- 怎麼用手機開發pythonPython
- 應用PMDK修改WAL操作使之適配持久化記憶體持久化記憶體
- 採用手工方式建立IPSec隧道示例
- Rational ClearQuest 安裝、配置、使用手冊
- 報警系統QuickAlarm使用手冊UI
- mysql常用命令使用手冊MySql
- 如何用手機模擬鐳射筆
- 魔法使之夜 雜談
- Canvas實用庫Fabric.js使用手冊CanvasJS