我使用Laravel 5.1,我试图拦截默认记录器配置(Monolog)并将日志保存到包含用户名的其他路径。
当前日志保存到storage / logs / laravel.log。
所需路径如下
经过身份验证的用户:存储/日志/ [用户名] / [日期] _ [api_path] .log
其他用户日志可以保存在storage / logs / guest / [date] _ [api_path] .log
下ServiceProvider方法
拥有 LogServiceProvider ,我可以在其中修改每个请求并根据需要设置路径。
public function boot(Request $request)
{
$log = new Logger('View Logs');
$user = \Auth::User()->getName(); // ERROR - uninitialized
$path = 'storage/logs/'.$user.'/mylogfile.log'; // doesn't matter API path
$log ->pushHandler(new StreamHandler($path, Logger::INFO));
...
}
这种方法存在问题,Auth :: user()似乎未初始化。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
您可能需要将其包装在if语句中,例如:
if ( Auth::check() ) {
// Do auth stuff
}
else {
// Do unauth stuff
}
这能解决您的问题吗?
答案 1 :(得分:0)
这是因为Auth还没有初始化,调用还为时过早。
class UserLogger
{
public function init()
{
$logger = new Logger('order');
$currUserId = Auth::id();
$logPath = storage_path('logs/by_user/' . $currUserId . '/' . Carbon::now()->toDateString() . '.log');
$logger->pushHandler(new StreamHandler($logPath, Logger::INFO));
return $logger;
}
}
//app\Http\Middleware\Authenticate.php
class Authenticate
{
public function handle($request, Closure $next, $guard = null)
{
$userLogger = new UserLogger();
$logger = $userLogger->init();
$context = ['some context data' => 'data'];
$logger->info('custom user actions', $context);
//...