Not working from Tinker and Impossible to use the channel as a regular channel
yossefmydev opened this issue ยท 8 comments
Hi,
First, thanks for this package! It is working but I wanted to share 2 possible improvements:
- It's not working from Tinker
- I can't log to the cloudwatch channel, for example with:
\Log::channel('cloudwatch')->info('test from Laravel App');
. In this case, I received the following error:
{
"message": "Unable to create configured logger. Using emergency logger.",
"context": {
"exception": {
"class": "ErrorException",
"message": "Undefined index: via",
"code": 0,
"file": "/home/pc-10/Projects/laravel7/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:227"
}
},
"level": 600,
"level_name": "EMERGENCY",
"channel": "laravel7",
"datetime": "2020-07-19T08:57:08.870730+00:00",
"extra": {}
}
Thanks for your help
@yossefmydev I have created a PR to use this as a custom driver.
Can you test this out for me?
install as:
composer require pagevamp/laravel-cloudwatch-logs:dev-use-as-custom-driver
and this in your config if you have not
'cloudwatch' => [
'driver' => 'custom',
'name' => env('CLOUDWATCH_LOG_NAME', ''),
'region' => env('CLOUDWATCH_LOG_REGION', ''),
'credentials' => [
'key' => env('CLOUDWATCH_LOG_KEY', ''),
'secret' => env('CLOUDWATCH_LOG_SECRET', ''),
],
'stream_name' => env('CLOUDWATCH_LOG_STREAM_NAME', 'laravel_app'),
'retention' => env('CLOUDWATCH_LOG_RETENTION_DAYS', 14),
'group_name' => env('CLOUDWATCH_LOG_GROUP_NAME', 'laravel_app'),
'version' => env('CLOUDWATCH_LOG_VERSION', 'latest'),
'disabled' => env('DISABLE_CLOUDWATCH_LOG', false),
'formatter' => function ($configs) {
return new \Monolog\Formatter\LineFormatter(
'%channel%: %level_name%: %message% %context% %extra%',
null,
false,
true
);
},
'via' => \Pagevamp\Logger::class //remember this is the the class
],
additional param via
is needed.
For this to work you will have to change you default driver as well, so in you .env
add
LOG_CHANNEL=cloudwatch
@developernaren it works, but now it completely replaces default logging. An option to keep the default logging together with Cloudwatch logs would be ideal IMO.
Hi there, I'm using Laravel 7 and trying to get this working as well. I did as above but can not yet see any logs in Cloudwatch. Your code is executing and not throwing any errors though. Any ideas on how I can debug?
It's easy enough to get normal logging working if you just add channels to the existing 'stack' channel.
'stack' => [
'driver' => 'stack',
'channels' => ['daily','cloudwatch'],
'ignore_exceptions' => false,
],
@netm It was working for me. If the log is not going it is most likely issue with AWS credentials. TBH, I tried as and independent channel and as Log::channel('cloudwatch')
both worked for me but have not tried as a stack
. But it should work. I will try as a stack when I have time and will let you know if I find anything.
@yossefmydev I have created a PR to use this as a custom driver.
Can you test this out for me?
install as:
composer require pagevamp/laravel-cloudwatch-logs:dev-use-as-custom-driver
and this in your config if you have not
'cloudwatch' => [ 'driver' => 'custom', 'name' => env('CLOUDWATCH_LOG_NAME', ''), 'region' => env('CLOUDWATCH_LOG_REGION', ''), 'credentials' => [ 'key' => env('CLOUDWATCH_LOG_KEY', ''), 'secret' => env('CLOUDWATCH_LOG_SECRET', ''), ], 'stream_name' => env('CLOUDWATCH_LOG_STREAM_NAME', 'laravel_app'), 'retention' => env('CLOUDWATCH_LOG_RETENTION_DAYS', 14), 'group_name' => env('CLOUDWATCH_LOG_GROUP_NAME', 'laravel_app'), 'version' => env('CLOUDWATCH_LOG_VERSION', 'latest'), 'disabled' => env('DISABLE_CLOUDWATCH_LOG', false), 'formatter' => function ($configs) { return new \Monolog\Formatter\LineFormatter( '%channel%: %level_name%: %message% %context% %extra%', null, false, true ); }, 'via' => \Pagevamp\Logger::class //remember this is the the class ],
additional param
via
is needed.For this to work you will have to change you default driver as well, so in you
.env
add
LOG_CHANNEL=cloudwatch
Hi @developernaren ,
- Why using line formatter here? Any advantages if we use line formatter instead of JsonFormatter?
- Is there any plan to merge the associated PR #24 ? It appears open for several months now.
-
This is a config you can easily change. When I first needed this repo it was because one of the example I used was not working. I just used the code from that file and just made it work, it did what I expected. Because I searched and did not find a working code / package for the cloudwatch, I made it a package hoping this would be helpful to others. I did not even write tests. It was a PR from someone else that I merged. Same with the formatter, it worked for my case, so just defaulted. If you think another format works better, just send a PR with arguments why it should be default, if it makes sense, I will merge.
-
this did not seem to be a priority for most so just left as is and also because this is a major refactor and the way it works, I will have to do some additional testing for this but I am very busy at the moment. I may have some time after couple of weeks. I can test and release after that.
It is definitely helpful thanks. I asked that question because the Readme on main branch shows an example that uses JsonFormatter. I was guessing that JsonFormatter is needed because cloudwatch requires logs to be submitted in json format. So I was curious when I saw your example config.
I'm trying to use this branch in my app. You are right. It is probably not a good idea to merge this PR as an update to the existing main branch as it will break existing apps using this library as it require changes in configuration. But I feel integrating as a new driver is the better way to do cloudwatch integration for Laravel. May be this can be released as a new major version release.
released a new version of this to work as regular channel.
https://github.com/pagevamp/laravel-cloudwatch-logs/releases/tag/v1.0.1
closing this issue.