Yii Logger封装 [ 求助交流 ]
Hello all, 我是php和Yii的新手,目前在项目中觉得Yii的日志库不太好用,主要是不能像printf那样格式化日志输出,尤其在日志中输出数组或对象时,需要用『"aaaa" . json_encode($arry) . "bbbb"』这样的代码来写,十分麻烦。 因此我想自己封装一个日志库,想要达到的效果是:
$logger = Logger::getLogger();
$logger->trace("Invalid parameters. param:%s", $params);
如下是我实现的一部分代码:
private function expandFormat($args)
{
$numArgs = count($args);
if (0 >= $numArgs) {
return "";
}
else if (1 >= $numArgs) {
return $args[0];
}
$format = $args[0];
$printfArgs = "";
for ($i = 1; $i < $numArgs; ++$i) {
$arg = $args[$i];
if (is_array($arg) || is_object($arg) || is_callable($arg)) {
$arg = json_encode($arg);
}
elseif (is_resource($arg)) {
$arg = "[Resource]";
}
$printfArgs .= ",";
$printfArgs .= is_string($arg) ? "'$arg'" : $arg;
}
**$message = eval("\$msg = sprintf('$format'$printfArgs); return \$msg;");**
return $message;
}
public final function trace($format)
{
**$message = $this->expandFormat(func_get_args());**
Yii::trace($message, $this->logTag);
}
粗体标识的两行代码是我遇到的问题,我想把trace函数的可变参数传递给sprintf,目前在我的知识范围内只知道可以用eval去实现。但是这样有严重的安全问题。 请问我有其它方法可以实现吗? 在线等,谢谢大家!
KevinZhao
注册时间:2016-04-09
最后登录:2016-04-09
在线时长:0小时19分
最后登录:2016-04-09
在线时长:0小时19分
- 粉丝0
- 金钱15
- 威望0
- 积分15