Laravel日志用法详解


Posted in PHP onOctober 09, 2016

本文实例讲述了Laravel日志用法。分享给大家供大家参考,具体如下:

这里使用的Laravel版本仍是5.2

日志是非常重要的。本地开发可以开启调试模式,但是上线的项目查看日志是非常简洁有效的调试手段。Laravel集成了Monolog日志库以便提供多种功能强大的日志处理器。

Laravel支持日志方法single, daily, syslog 和 errorlog。例如,如果你想要日志文件按日生成而不是生成单个文件,应该在配置文件config/app.php中设置log值如下:

'log' => 'daily'

系统默认配置为single

#config/app.php:111
'log' => env('APP_LOG', 'single'),

下面我们看下Laravel是如何配置日志的。

#vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:36
protected $bootstrappers = [
    'Illuminate\Foundation\Bootstrap\DetectEnvironment',
    'Illuminate\Foundation\Bootstrap\LoadConfiguration',
    'Illuminate\Foundation\Bootstrap\ConfigureLogging',
    'Illuminate\Foundation\Bootstrap\HandleExceptions',
    'Illuminate\Foundation\Bootstrap\RegisterFacades',
    'Illuminate\Foundation\Bootstrap\RegisterProviders',
    'Illuminate\Foundation\Bootstrap\BootProviders',
];
<?php
namespace Illuminate\Foundation\Bootstrap;
use Illuminate\Log\Writer;
use Monolog\Logger as Monolog;
use Illuminate\Contracts\Foundation\Application;
class ConfigureLogging
{
/**
 * Bootstrap the given application.
 *
 * @param \Illuminate\Contracts\Foundation\Application $app
 * @return void
 */
public function bootstrap(Application $app)
{
  $log = $this->registerLogger($app);
  // If a custom Monolog configurator has been registered for the application
  // we will call that, passing Monolog along. Otherwise, we will grab the
  // the configurations for the log system and use it for configuration.
  if ($app->hasMonologConfigurator()) {
    call_user_func(
      $app->getMonologConfigurator(), $log->getMonolog()
    );
  } else {
    $this->configureHandlers($app, $log);
  }
}

如果自定义Monolog配置,走if条件,默认走else

protected function configureHandlers(Application $app, Writer $log)
{
    $method = 'configure'.ucfirst($app['config']['app.log']).'Handler';
    $this->{$method}($app, $log);
}
/**
* Configure the Monolog handlers for the application.
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @param \Illuminate\Log\Writer $log
* @return void
*/
protected function configureSingleHandler(Application $app, Writer $log)
{
     $log->useFiles(
       $app->storagePath().'/logs/laravel.log', #存储文件
       $app->make('config')->get('app.log_level', 'debug') #存储级别
     );
}

这里useFiles方法是注册signle文件日志处理程序,并设置存储文件以及存储的级别。

下面是初始化日志时的4种日志处理注册方式。

public function useFiles($path, $level = 'debug') #单一文件
public function useDailyFiles($path, $days = 0, $level = 'debug') #每日生成
public function useSyslog($name = 'laravel', $level = 'debug') #系统日志的方式
public function useErrorLog($level = 'debug', $messageType = ErrorLogHandler::OPERATING_SYSTEM) #等同于php的error_log方式

日志初始化信息基本上就是上面这些。

你可以使用Log门面编写日志信息到日志中:

八种日志级别:emergency, alert, critical, error,warning, notice, info 和 debug。

Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
浅谈PHP语法(1)
Oct 09 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
基于PHP制作验证码
Oct 12 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
Laravel手动分页实现方法详解
Oct 09 #PHP
Laravel5.1自定义500错误页面示例
Oct 09 #PHP
Laravel重写用户登录简单示例
Oct 08 #PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 #PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 #PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 #PHP
yii通过小物件生成view的方法
Oct 08 #PHP
You might like
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
Vue 多层组件嵌套二种实现方式(测试实例)
2017/09/08 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
Python深入学习之内存管理
2014/08/31 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
python调用百度语音REST API
2018/08/30 Python
Python 获取div标签中的文字实例
2018/12/20 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
python如何实现递归转非递归
2021/02/25 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
Java如何获得ResultSet的总行数
2016/09/03 面试题
水电维修专业推荐信
2014/09/06 职场文书
查摆剖析材料范文
2014/09/30 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
Python MNIST手写体识别详解与试练
2021/11/07 Python
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python