欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel日志文件太大 有大用

laravel设置日志为每天产生一个日志文件,现有有个问题,日志文件太大,动不动就20多M,有什么方法能让它自动切割,大于2m就生成一个新的日志文件呢?

我不是很清楚laravel他自己有没有自带的这种功能

针对这种需求一般的做法就是写个daemon或者定时脚本实时监控日志文件,然后把旧的打包,生成新的日志文件

其实一般更常见的做法不是按文件大小处理日志而是按时间,比如每天晚上12点将当天的日志打包,生成空的新日志文件,并且隔一段时间清理一些旧的日志文件,至于这些尺度可以自己定制化


0

按天的日志大是因为你log_level配置的不对吧,如果你切割的每天的日志,那么找问题时候,你然后需要每个去看,好像只会更麻烦。

0

这种情况下建议不使用Laravel自己的日志切割,使用Linux系统的logrotate进行日志切割

/webroot/laravel.log {
    size=2M
    rotate 100
    missingok
    notifempty
    sharedscripts
    delaycompress
}
0

你需要配置这几项

'log' => env('APP_LOG', 'daily'),

'log_level' => env('APP_LOG_LEVEL', 'debug'),

'log_max_files' => 30,


来自 https://segmentfault.com/q/1010000012004306/

laravel 调试模式及日志配置

1)调试模式和日志的配置都在 config/app.php 配置文件中

 

2)打开调试模式

'debug' => env('APP_DEBUG', true)

 

3)laravel的日志默认已经打开了(不可以关),我们可以修改一下日志的记录方式(默认 single 单文件记录)

'log' => env('APP_LOG', 'daily')

PS:日志的记录方式有 single, daily, syslog, errorlog

 

4)设置报错级别(避免生成过多日志)

'log_level' => env('APP_LOG_LEVEL', 'error')

PS:config/app.php 文件里默认是没这个配置项的,要自己加,可以使用的值还有 debug, info, notice, warning, error, critical, alert, emergency

来自 https://www.cnblogs.com/tujia/p/6222869.html



laravel 怎么关闭日志。storage/laravel.log 都 5 个 G 了……


  

   cevincheung · 2016-04-16 18:52:07 +08:00 · 1143 次点击
这是一个创建于 911 天前的主题,其中的信息可能已经有所发展或是发生改变。
4 回复  |  直到 2016-04-16 20:19:53 +08:00

    1
guoer   2016-04-16 19:57:45 +08:00   ♥ 1
logrotate

    2
cevincheung   2016-04-16 20:11:16 +08:00
@guoer 就是说没办法关闭呗……

把日志路径放到 /dev/null 算了- -#

    3
aaronly   2016-04-16 20:16:24 +08:00   ♥ 1
把日志设置成一天一份不就没那么大了么

    4
Andy1999   2016-04-16 20:19:53 +08:00 via iPhone   ♥ 1
直接 rm -f …


来自  https://www.v2ex.com/t/271600

怎么关闭日志

日志文件接近200G,能不启用吗?还是要写个程序定时删除呢?
这都一年多了都没人回答? 这很重要的一个问题。
先给方法 : 
App\Exceptions\Handler 下面将 report render 两个方法里面的代码注释掉
public function report(Exception $e)
{
//        return parent::report($e);
}
public function render($request, Exception $e)
{
//        if ($e instanceof ModelNotFoundException) {
//            $e = new NotFoundHttpException($e->getMessage(), $e);
//        }
//
//        return parent::render($request, $e);

}

Laravel的日志使用的第三方包 'MonoLog' 并不是 MongoDB,他的日志只能存文件 ....
有条件还是换MongoDB 自己记日志吧, MongoDB Collection 指定长度, 天然的日志记录方案, 后台做统计界面也方便, 存文件 只能要运维去跑脚本处理到数据库

来自  http://wenda.golaravel.com/question/928

laravel支持的日志写入模式和日志严重程度级别:

四种日志写入模式:

single:单一的

daily:日常的

syslog:系统记录

errorlog:错误日志

 

Monolog 识别以下严重程度的级别,

从低到高为: debug、 infonotice、 warningerrorcriticalalertemergency

debug:调试。

info:信息

notice:通知,注意

warning:警告

error:错误

critical:危险的

alert:弹出警告

emergency:紧急情况,突发事件

来自 https://www.cnblogs.com/yiweiyihang/p/8005915.html



Laravel-日志管理


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wlzx120/article/details/77161679

Laravel 集成了 Monolog 日志函数库,Monolog 支持和提供多种强大的日志处理功能。

1、设置,日志模式

Laravel 提供可立即使用的 singledailysyslog 和 errorlog 日志模式。例如,如果你想要每天保存一个日志文件,而不是单个文件,则可以在 config/app.php 配置文件内设置 log 变量:

'log' => 'daily'

当使用「日志模式」时,默认情况下会保存 5 天的日志,你可通过 app.php 配置文件里的配置项 log_max_files来定制日志保存天数:

'log_max_files' => 30

如果你想要完全控制 Monolog,则使用应用程序的 configureMonologUsing 方法。此方法应该在bootstrap/app.php 文件返回 $app 变量之前被调用:

  1. $app->configureMonologUsing(function($monolog) {
  2.    $monolog->pushHandler(...);
  3. });
  4. return $app;

默认情况下,Laravel 对所有的错误级别进行记录,你可以通过定制 app.php 的 log_level 设置项来限制错误记录级别。Laravel 会记录大于或者等于你设置的 log_level 的值,例如:设置 log_level 为 error 级别的话,Laravel 会记录 errorcriticalalert, 和 emergency 级别的错误。

'log_level' => env('APP_LOG_LEVEL', 'debug'),
1、日志写入

Laravel 日志工具在强大的 Monolog 函数库上提供多一层简单的功能。Laravel 默认为应用程序创建每日的日志文件并保存在 storage/logs 目录。你可以使用 Log facade 来将信息写入到日志上:

use Log;
Log::info('Showing user profile for user: '.$id);


日志工具提供了定义在 RFC 5424 的八个级别: emergencyalertcriticalerrorwarningnoticeinfo 和debug

  1. Log::emergency($error);
  2. Log::alert($error);
  3. Log::critical($error);
  4. Log::error($error);
  5. Log::warning($error);
  6. Log::notice($error);
  7. Log::info($error);
  8. Log::debug($error);


来自 https://blog.csdn.net/wlzx120/article/details/77161679



Laravel两种记录日志的两种方式

利用Monolog基础用法

官方的例子,生成日志类对象,进行操作

复制代码
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// add records to the log
$log->warning('Foo');
$log->error('Bar');
复制代码

例如:

$log = new Logger('register');
$log->pushHandler(new StreamHandler(storage_path('logs/reg.log'),Logger::INFO) );
$log->addInfo('用户注册信息:'.$input);

Laravel的方法

Log::useFiles(storage_path().'/logs/laravel.log')->info('用户注册原始数据:',$input);

来自 https://www.cnblogs.com/cs88/p/6274461.html


在laravel中,日志设置为daily时,默认保存七天的日志,超过则清除七天前的日志。可修改默认的设置,假如要保存30天的日志,则配置如下:

在配置文件config/app.php中添加如下代码:

‘log_max_files’ => 30,

 

修改配置后,需要重启php服务器,配置才会生效!!!

来自 https://www.cnblogs.com/lovejun/archive/2016/03/15/5278341.html


laravel中的错误与日志(可以自定义日志目录和log文件名)


laravel中的错误与日志

2014-12-19 10:09 by 轩脉刃, 21252 阅读, 1 评论, 收藏编辑

日志

laravel中的日志是基于monolog而封装的。laravel在它上面做了几个事情:

  • 把monolog中的addInfo等函数简化成为了info这样的函数

  • 增加了useFiles和useDailyFiles两个参数,使得做日志管理和切割变的容易了

  • 如果要调用monolog的方法需要调用callMonolog函数

好了,看下下面几个需求怎么实现:

将不同的日志信息存放到不同的日志中去

这个需求很普遍的,比如调用订单的日志,需要记录到order.log,获取店铺信息的记录需要记录到shop.log中去。可以这么做:

  1. <?php
  2. use Monolog\Logger;
  3. use Monolog\Handler\StreamHandler;
  4. use Illuminate\Log\Writer;
  5. class BLogger
  6. {
  7. // 所有的LOG都要求在这里注册
  8. const LOG_ERROR = 'error';
  9. private static $loggers = array();
  10. // 获取一个实例
  11. public static function getLogger($type = self::LOG_ERROR, $day = 30)
  12. {
  13. if (empty(self::$loggers[$type])) {
  14. self::$loggers[$type] = new Writer(new Logger($type));
  15. self::$loggers[$type]->useDailyFiles(storage_path().'/logs/'. $type .'.log', $day);
  16. }
  17. $log = self::$loggers[$type];
  18. return $log;
  19. }
  20. }

这样不同的日志数据会被存储到不同的日志文件中去。还能记录日志数据信息。

laravel的错误日志堆栈太长了,怎么办?

使用上面的BLogger类,在start/global.php记录下必要的错误信息

  1. // 错误日志信息
  2. App::error(function(Exception $exception, $code)
  3. {
  4. Log::error($exception);
  5. $err = [
  6. 'message' => $exception->getMessage(),
  7. 'file' => $exception->getFile(),
  8. 'line' => $exception->getLine(),
  9. 'code' => $exception->getCode(),
  10. 'url' => Request::url(),
  11. 'input' => Input::all(),
  12. ];
  13. BLogger::getLogger(BLogger::LOG_ERROR)->error($err);
  14. });

laravel默认的日志没有使用分割

所以应该默认把laravel的默认日志记录改成有分割的。

同样在start/global.php中

Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);

如何记录一个请求的sql日志

这个应该再细化问,你是不是要实时记录?

如果不要实时记录,那么laravel有个DB::getQueryLog可以获取一个app请求获取出来的sql请求:

  1. ## 在filters.php中
  2. App::after(function($request, $response)
  3. {
  4. // 数据库查询进行日志
  5. $queries = DB::getQueryLog();
  6. if (Config::get('query.log', false)) {
  7. BLogger::getLogger('query')->info($queries);
  8. }
  9. }

如果你是需要实时记录的(也就是你在任何地方die出来的时候,之前的页面的sql请求也有记录)的话,你就需要监听illuminate.query事件了

  1. // 数据库实时请求的日志
  2. if (Config::get('database.log', false))
  3. {
  4. Event::listen('illuminate.query', function($query, $bindings, $time, $name)
  5. {
  6. $data = compact('query','bindings', 'time', 'name');
  7. BLogger::getLogger(BLogger::LOG_QUERY_REAL_TIME)->info($data);
  8. });
  9. }

错误

laravel的所有错误会全部过global的App::error再出来

所以比如你设计的是接口,希望即使有error出现也返回json数据,则可以这么做:

  1. // 错误日志信息
  2. App::error(function(Exception $exception, $code)
  3. {
  4. // 如果没有路径就直接跳转到登录页面
  5. if ($exception instanceof NotFoundHttpException) {
  6. return Redirect::route('login');
  7. }
  8. Log::error($exception);
  9. $err = [
  10. 'message' => $exception->getMessage(),
  11. 'file' => $exception->getFile(),
  12. 'line' => $exception->getLine(),
  13. 'code' => $exception->getCode(),
  14. 'url' => Request::url(),
  15. 'input' => Input::all(),
  16. ];
  17. BLogger::getLogger(BLogger::LOG_ERROR)->error($err);
  18. $response = [
  19. 'status' => 0,
  20. 'error' => "服务器内部错误",
  21. ];
  22. return Response::json($response);
  23. });

如果你还希望将404错误也hold住:

  1. App::missing(function($exception)
  2. {
  3. $response = [
  4. 'status' => 0,
  5. 'error' => "请求路径错误",
  6. ];
  7. return Response::json($response);


来自 https://blog.csdn.net/wulove52/article/details/71172955

普通分类: