当前位置: 首页 > 知识库问答 >
问题:

Laravel每日日志创建错误的权限

楚墨一
2023-03-14

我有一个使用php artisan(root用户)运行的脚本,有时它会导致在apache www数据用户创建日志文件之前创建日志文件,这意味着当真实用户使用我的web应用程序时,我会收到文件夹权限错误:

无法打开流:权限被拒绝

我每次都会将权限更改回www数据,但我希望通过始终使用正确的权限创建日志文件来解决此问题。

我考虑过创建一个cron作业来创建文件或触摸它,以确保它每天都有正确的权限,但是我正在寻找一个不依赖于另一个脚本的更好的解决方案。

我们还考虑在另一个脚本中包装php artisan,以确保它始终使用www.-data凭据运行,但是我们想做的一些事情实际上是apache不应该允许做的根过程。

还有什么建议吗?

共有3个答案

施恩
2023-03-14

对于Laravel 5.1,我在bootstrap/app.php的底部使用了以下内容(如文档中所述):

/**
 * Configure Monolog.
 */
$app->configureMonologUsing(function(Monolog\Logger $monolog) {
    $filename = storage_path('logs/laravel-'.php_sapi_name().'.log');
    $handler = new Monolog\Handler\RotatingFileHandler($filename);
    $monolog->pushHandler($handler);
});

当然,您可以使用许多其他处理程序。

高兴贤
2023-03-14

重要信息:此答案与laravel 5.5不兼容。请参阅此答案:使用laravel5.6的自定义(动态)日志文件名

让我们从常数开始。

您有一个php artisan命令,由root运行。

可以安全地假设这个命令每天都在执行。

解决方案1:

假设创建文件的用户在默认情况下具有写入权限,我们可以按用户将日志分开:

App/start/global.php

/*
|--------------------------------------------------------------------------
| Application Error Logger
|--------------------------------------------------------------------------
|
| Here we will configure the error logger setup for the application which
| is built on top of the wonderful Monolog library. By default we will
| build a basic log file setup which creates a single file for logs.
|
*/

Log::useDailyFiles(storage_path().'/logs/laravel-'.posix_getpwuid(posix_geteuid())['name'].'.log');

如果您的www数据用户创建错误日志,则会导致:storage/logs/laravel-www-data-2015-4-27.log

如果root用户要创建错误日志,则会导致:storage/logs/laravel-root-2015-4-27.log

解决方案2:

在php脚本中更改artisan命令使用的日志。

run()函数中,在开头添加此行:

Log::useFiles(storage_path().'/logs/laravel-'.__CLASS__.'-'.Carbon::now()->format('Y-m-d').'.log');

如果你的类的名称是ArtisanRunner,那么你的日志文件将是:

存储/logs/laravel-ArtisanRunner-2015-4-27.log

结论:解决方案1更好,因为它按用户描述您的日志,因此不会发生错误。

编辑:正如jason指出的,get\u current\u user()返回脚本的所有者名称。因此,要应用解决方案1,chown将artisan类文件设置为所需的用户名。

梁渊
2023-03-14

Laravel版本5.6.10及更高版本支持配置(配置/logging.php)中的权限元素,用于单个每日驱动程序:

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 7,
        'permission' => 0664,
    ],

不需要在引导脚本中玩弄Monolog。

具体而言,在https://github.com/laravel/framework/commit/4d31633dca9594c9121afbbaa0190210de28fed8.中增加了支持

 类似资料:
  • DailyRollingFileAppender没有创建每日备份日志文件。 我正在使用下面的配置,它在我的本地机器上工作,但在部署项目的机器上不工作。 框架——SpringMVC 我无法理解配置的哪个部分正在阻塞DailRollingFileAppender,以便在我的服务器上创建日期日志。 编辑- 我根据建议更新了我的文件,但在第二天上午12点,它不会创建新的备份文件。意味着它更新了AppLog

  • 问题内容: 如何确定所创建文件的权限? 我最近更改了一个守护进程,我必须以非root用户身份运行,并且现在正在使用许可(仅所有者可以读取)创建文件,但是我希望它们可以被全部或至少成员读取。管理员组(或)。我的tomcat应用程序创建的文件始终(所有人可读)。 我不知道我是否无意中更改了其他内容,或者是否与该用户的权限有关。我将父目录作为测试进行了,它似乎没有帮助(它是)。显然,因为我可以看一下它们

  • 每次我尝试删除或创建一些主体时,我都会在此处收到此错误日志: http://pastebin.com/nTgsNdzZ 我删除/创建我的身体,以便: 删除: 创建: 我做错了什么?我检查世界是否被锁定,然后我将创建:/

  • 主要内容:启动和设置错误日志,查看错误日志,删除错误日志错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。 作为初学者,要学会利用错误日志来定位问题。下面介绍如何操作查看错误日志。 启动和设置错误日志 在 MySQL 数据库中,默认开启错误日志功能。一般情况下,错误日志存储在 MySQL 数据库的数据文件夹下,通常名称为 hostname.er

  • 简介 当你开始一个新的 Lumen 项目时,Lumen 已经帮你配置好错误和异常处理的操作。另外,Lumen 也集成了 Monolog 日志函数库,Monolog 支持和提供多种强大的日志处理功能。 有关日志的更多内容,请阅读 Laravel 的完整 日志文档.

  • 问题内容: 我想在我的Java项目中使用Log4j,我应该在配置文件中提供该配置,该配置文件每天晚上12:00将生成一个新文件,并且文件名应类似于 -output- log-of-MyProjectName-HostName-2013-Dec-10。 txt 名称)。我的配置文件就是这样- 它每天都在创建新文件,但在文件名后附加日期。请帮我。提前致谢。 问题答案: 我认为您想要DailyRolli