Giter Site home page Giter Site logo

opcodesio / log-viewer Goto Github PK

View Code? Open in Web Editor NEW
3.3K 20.0 224.0 3.66 MB

Fast and beautiful Log Viewer for Laravel

Home Page: https://log-viewer.opcodes.io

License: MIT License

PHP 62.97% JavaScript 7.83% SCSS 4.49% Blade 0.31% Vue 24.40%
laravel laravel-package laravel8 laravel9 log-viewer logging logs

log-viewer's Introduction

Log Viewer
Easy-to-use, fast, and beautiful

Documentation | Features | Installation | Troubleshooting | Credits

Packagist Packagist PHP from Packagist Laravel Version

log-viewer-light-dark

OPcodes's Log Viewer is a perfect companion for your Laravel app.

You will no longer need to read the raw Laravel log files (and other types of logs) trying to find what you're looking for.

Log Viewer helps you quickly and clearly see individual log entries, to search, filter, and make sense of your Laravel logs fast. It is free and easy to install.

๐Ÿ“บ Watch a quick 4-minute video showcasing some Log Viewer features.

Features

  • ๐Ÿ“‚ View all the Laravel logs in your storage/logs directory,
  • ๐Ÿ“‚ View other types of logs - Horizon, Apache, Nginx, Redis, Supervisor, Postgres, and more,
  • ๐Ÿ” Search the logs,
  • ๐ŸŽš Filter by log level (error, info, debug, etc.),
  • ๐Ÿ”— Sharable links to individual log entries,
  • ๐ŸŒ‘ Dark mode,
  • ๐Ÿ“ฑ Mobile-friendly UI,
  • ๐Ÿ–ฅ๏ธ Multiple host support,
  • โŒจ๏ธ Keyboard accessible,
  • ๐Ÿ’พ Download & delete log files from the UI,
  • โ˜‘๏ธ Horizon log support (up to Horizon v9.20),
  • โ˜Ž๏ธ API access for folders, files & log entries,
  • ๐Ÿ’Œ Mail previews for e-mails sent to the logs,
  • and more...

Documentation

Documentation can be found on the official website.

Get Started

Requirements

  • PHP 8.0+
  • Laravel 8+

Installation

To install the package via composer, Run:

composer require opcodesio/log-viewer

After installing the package, publish the front-end assets by running:

php artisan log-viewer:publish

Usage

Once the installation is complete, you will be able to access Log Viewer directly in your browser.

By default, the application is available at: {APP_URL}/log-viewer.

(for example: https://my-app.test/log-viewer)

Configuration

Please visit the Log Viewer Docs to learn about configuring Log Viewer to your needs.

Troubleshooting

Here are some common problems and solutions.

Problem: Logs not loading

Please see this page for support log formats. If your log has a custom format, or is not supported by Log Viewer out of the box, you will need to define your own custom log parser.

If your logs are still not showing up, make sure the web process, which Log Viewer runs on, has permission to read these logs.

For example, if you want to read the Apache HTTP access logs in /var/log/httpd, you will need to make sure that your web process (apache/httpd) has permission to read these files. On unix systems, you can do this with file ACLs.

Screenshots

Read the release blog post for screenshots and more information about Log Viewer's features.

The release of v2 includes a few new features in v2.

The release of v3 includes a few new features in v3.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

log-viewer's People

Contributors

advaith3600 avatar alphaolomi avatar andydptyo avatar artshade avatar arukompas avatar corean avatar crazyboy49z avatar dansysanalyst avatar datlechin avatar faytekin avatar florisbosch avatar fsamapoor avatar gdebrauwer avatar jemcdo avatar jnyheim avatar kamandlou avatar ljdj avatar luanfreitasdev avatar mabdullahsari avatar memu avatar parth391 avatar propaganistas avatar tfevens avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

log-viewer's Issues

"No results" even though the file contains entries

Hello

First of all: great work with this package, i love it and added it to all my laravel projects.

I'm facing a odd behaviour as you can see in the screenshot below:
The horizon.log is 1.05MB and also contains data if i look at the file in a raw editor, but the log-viewer shows "no results"

image

(Browser cache cleared, Cookies & Local storage cleared, log-viewer index rebuilt, permissions of log file checked)

Is there any way i can dive deeper into the reading process and see what's happening (or not happening).
Thanks.

Division by zero

This error appears when you try to use the search without any log file in your app

Unable to view log files

Hi,
I have log files shown in the sidebar, however when i click on them, there is a 404 window opening with errors on the browser console window.
Following are the screenshots:
Logs Visible:
image

404 upon clicking:
image

No cookie found

Schermafbeelding 2022-09-16 om 12 49 20

Just installed the package on a new app. Every time I reload the page above a new entry of the warning is added.

The current line:

$this->preferences = json_decode($request->cookie(self::COOKIE_KEY), true) ?? [];

A possible fix:

$this->preferences = json_decode($request->cookie(self::COOKIE_KEY) ?? '', true) ?? [];

This is on PHP 8.1.10

Export view into resource is not working

Export view from "vendor" to the folder "Resources/views" for customization

Is there any way to get all the files and folder inside the root folder?

As we when we are adding secure headers in the application it is blocking the entire screen to render

Is there any way to add nonce in the script to handle the application and display the log file

Hi, i have problem with the same files name

Hi, i have problem with the same file name
*you can see at the picture,
i have same file name but with different directory folder, when i try to open A/test.log i can see the logs but when i try to open B/test.log it can't open the logs it keep going open the A/test.log.
how to solve this ?

log-viewer

Bad folder-path displayed when using subfolders

When including a subfolder by adding users/*.log (for example) to the include_files-config, the folder-item displays the full path as title for the directory, which I don't think is the correct behaviour. Also this is not the full-path, since it only points to the root of the Laravel-Application. The log-files are still displayed correctly though.

grafik

Correct path in this case would be: C:\Users\matthias.thalmann\Work\splus-dashboard-new-re\api\storage\logs\users

Edit: The sub-folder is not included automatically, if that should be the case. Therefore I had to add it manually.

> Hey @dkmonaghan , thanks for reporting this!

Hey @dkmonaghan , thanks for reporting this!

The line this fails at means it's not finding the timestamp for this particular log entry. This tells me there might be something in the second log file (the one you're switching to later) that's not properly understood by the log viewer.

Could you please share the full log file (as an attachment, not a quote here) that you're switching to in your example?

Thanks! ๐Ÿ™Œ

Hi @arukompas - thanks for the quick reply!

I've just spent some time removing lines from my test log file to see where it fails, and it seems like there's no line specifically that's causing it to fail. I'm actually even more baffled than I was before, and I think the de-selecting of "NOTICE" was actually a red herring. The behaviour happens regardless of whether or not I have any filtering of event types enabled.

I've created a log file called test.log containing only the below, and this fails consistently:

[2022-08-30 15:42:54] production.NOTICE: Test

I'm pretty stumped by this. I have log files that are multiple megabytes large that render fine, yet the above fails to render. The request that actually returns the HTTP 500 is a call to livewire/message/log-viewer::log-list, if that helps. Let me know what more information I can provide - if a video would be helpful, I'm happy to provide that.

If it helps, here is the request payload to that Livewire endpoint.

image

Additionally, while experimenting, I discovered that the viewer fails with a fatal error if no logs at all are found in the directory, rather than failing gracefully. It'd be nice if it didn't do this!

Originally posted by @dkmonaghan in #39 (comment)

Error: Method Collection::linkCollection does not exist

I'm getting an error after opening a log file (in the popup/overlay):

Method Illuminate\Support\Collection::linkCollection does not exist. (View: .../vendor/opcodesio/log-viewer/resources/views/pagination.blade.php) (View: .../vendor/opcodesio/log-viewer/resources/views/pagination.blade.php)

That's this line in the view:

$links = $paginator->linkCollection()->toArray();

My Laraval version is 8.33.1. Maybe linkCollection is newer? That should be in the requirements. Or maybe my custom setup is breaking something.

My Illuminate\Pagination\LengthAwarePaginator does have a method linkCollection, but it's protected.

Small overflow issue

First of all, thanks for this package. It's way better than any of the alternatives.

I noticed a minor UI issue where the dropdown menu gets clipped:
image

Consider using CarbonInterface for type hints

If the Laravel application is using CarbonImmutable by default, the following error is thrown when attempting to view a particular log file:

Opcodes\LogViewer\LogIndex::cacheTtl(): Return value must be of type Carbon\Carbon, Carbon\CarbonImmutable returned {"userId":2,"exception":"[object] (TypeError(code: 0): Opcodes\\LogViewer\\LogIndex::cacheTtl(): Return value must be of type Carbon\\Carbon, Carbon\\CarbonImmutable returned at /Users/stevehurst/Sites/myqla.com/vendor/opcodesio/log-viewer/src/LogIndex.php:58)

To reproduce:

  1. Add Illuminate\Support\Facades\Date::use(CarbonImmutable::class); to AppServiceProvider::boot()
  2. Browse to /log-viewer
  3. Click on a log file

(Note the current best practice appears to be to use the immutable_datetime casts rather than a global override via Date::use(), so happy to be 'shot down' here.)

Undefined constant "Opcodes\LogViewer\GLOB_BRACE"

Undefined constant "Opcodes\LogViewer\GLOB_BRACE"
(View: /builds/dev/amvisor-admin/vendor/opcodesio/log-viewer/resources/views/index.blade.php)

Using UNIX System. Seems to got introduced in 1.5.2.

hey @dkmonaghan , ok, so there's 2 bugs now! :D

hey @dkmonaghan , ok, so there's 2 bugs now! :D

1. The exception when viewing test.log

I'm still finding it difficult to replicate ๐Ÿ˜… Maybe the issue is with a different PHP version or a different OS, which behaves slightly differently or has a different REGEX behaviour...

Here's the latest (v1.2.1) log viewer that handles this test.log file with just a single line, just fine:
Screenshot 2022-08-31 at 07 38 00

I've made a small bugfix to validate the last log entry. Could you please upgrade to the latest (v1.2.3) version of the Log Viewer first?

If it still fails, could you please let me know:

  • the Log Viewer version you're using (bottom right corner)
  • the PHP version
  • Laravel version
  • the OS you're using

This might help me debug the issue if I can mimick the exact environment.

2. Failure when no log files are found

I was testing this and found that the exception only occurs when the file from the query param (e.g. localhost/log-viewer?file=test.log) is not found. I've added a check for that in the newest v1.2.3 release

Originally posted by @arukompas in #39 (comment)

No log files exist if the project path contains square brackets

Hello,

The wrong behavior:

When opening the log-viewer no log files exist.

The cause:

Using PHP glob() function to get the log files breaks the package if the project path contains square brackets. This is a known issue with glob() function (https://bugs.php.net/bug.php?id=33047).

Example path:

D:\laravel\[2]New\

Glob() is used here:

$files = array_diff($files, glob($pattern));

If you can use another approach to get the log files, it will be great!

Specs:

PHP: 8.1.6
Laravel: 8.83.23
OS: Windows 10

Undefined array key 1

Hello

I've seen this has been brought up before in #84 previously. We are using v1.4.2 which should be the latest version.

You should be able to reproduce it using this dump and the latest Laravel release: https://pastebin.com/5QF5fB2V
This only happens when you toggle either of the checkboxes (Error / None).

Can't select log file on mobile

On mobile devices (definitely reproducible with the iPhone 12 Pro simulator in the Chrome Dev Tools) you can't select a log file so you can't view your logs at all except through search.

127 0 0 1_8000_logs(iPhone 12 Pro)

Regular error

php version : 8.1
laravel version:8

When I visit the log-viewer path ,it went wrong.

image

Count and Data mismatched.

I found one issue in a log file.

you can see my screenshot. There is 2 count displayed in the dropdown, but in the list, there is only one record displayed.
image

in the original log file, there are 2 records.

livewire.js not found

Hello, nice package, it works great on localhost and i love it, but i have problem with livewire.js script load on my staging server, it's loading to the root of host, but my app url has some path like this :

mydomain.com/digital-receipt/

image

image

image

production.ERROR: Class "Opcodes\LogViewer\Utils\Utils" not found

Hi, on production server sometimes this error occurs

[2022-10-08 22:26:55] production.ERROR: Class "Opcodes\LogViewer\Utils\Utils" not found (View: /var/www/vhosts/topoleiloes.com.br/httpdocs/vendor/opcodesio/log-viewer/resources/views/livewire/log-list.blade.php) {"userId":20000,"exception":"[object] (Illuminate\\View\\ViewException(code: 0): Class \"Opcodes\\LogViewer\\Utils\\Utils\" not found (View: /var/www/vhosts/topoleiloes.com.br/httpdocs/vendor/opcodesio/log-viewer/resources/views/livewire/log-list.blade.php)

CleanShot 2022-10-08 at 22 34 29@2x

No logs streamed

Hello,

I tried using the package and it loads log files just fine (I can even download them with full content), however I am not getting anything in the view.

I am using non-published conf (all defaults), latest version (1.2.4) with L9.13.0.
Also tried chmod -R 777 storage, didn't help. Also tried flushing cache.

I am running a Docker container with Roadrunner server.

image

No publishable resources for tag [laravel-assets].

> @php artisan vendor:publish --tag=laravel-assets --ansi
No publishable resources for tag [laravel-assets].

I finally got this problem when I installed it with composer, there is no livewire directory in public!

Exception when parsing some logs

Have some logs and when log-viewer parse them it gets exception:

[previous exception] [object] (TypeError(code: 0): call_user_func(): Argument #1 ($callback) must be a valid callback, no array or string given at /app/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php:558)
[stacktrace]
#0 /app/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php(558): call_user_func(NULL)
#1 /app/vendor/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php(91): Illuminate\\Pagination\\AbstractPaginator::viewFactory()
#2 /app/vendor/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php(79): Illuminate\\Pagination\\LengthAwarePaginator->render('log-viewer::pag...', Array)
#3 /app/storage/framework/views/08e87b02738ad190ed3ebbad40f202ab8083fd18.php(125): Illuminate\\Pagination\\LengthAwarePaginator->links('log-viewer::pag...')
#4 /app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(83): include('/app/storage/fr...')
#5 /app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(84): Opcodes\\LogViewer\\Http\\Livewire\\LogList->Livewire\\ComponentConcerns\\{closure}()
#6 /app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(59): Livewire\\LivewireViewCompilerEngine->evaluatePath('/app/storage/fr...', Array)
#7 /app/vendor/laravel/framework/src/Illuminate/View/View.php(139): Livewire\\LivewireViewCompilerEngine->get('/app/vendor/opc...', Array)
#8 /app/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#9 /app/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#10 /app/vendor/livewire/livewire/src/Component.php(235): Illuminate\\View\\View->render()
#11 /app/vendor/livewire/livewire/src/HydrationMiddleware/RenderView.php(14): Livewire\\Component->output()
#12 /app/vendor/livewire/livewire/src/LifecycleManager.php(154): Livewire\\HydrationMiddleware\\RenderView::dehydrate(Object(Opcodes\\LogViewer\\Http\\Livewire\\LogList), Object(Livewire\\Response))
#13 /app/vendor/livewire/livewire/src/Connection/ConnectionHandler.php(15): Livewire\\LifecycleManager->dehydrate()
#14 /app/vendor/livewire/livewire/src/Controllers/HttpConnectionHandler.php(20): Livewire\\Connection\\ConnectionHandler->handle(Array)
#15 /app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(48): Livewire\\Controllers\\HttpConnectionHandler->__invoke('log-viewer::log...')
#16 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Livewire\\Controllers\\HttpConnectionHandler), '__invoke')
#17 /app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#18 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()
#19 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#20 /app/app/Http/Middleware/LogUserAction.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\LogUserAction->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /app/app/Http/Middleware/RequestLogger.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\RequestLogger->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure))
#32 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#39 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#40 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#41 /app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#42 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#43 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#44 /app/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#45 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Livewire\\DisableBrowserCache->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#46 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#47 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(36): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#50 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#51 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#52 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#53 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#54 /app/app/Http/Middleware/ClockworkMiddleware.php(29): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#55 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ClockworkMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#56 /app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#57 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#58 /app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#59 /app/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#60 {main}

ErrorException: Undefined array key 1

This looks promising for cleaning up my logs to view quickly. Thank you.

But I'm having a couple issues below.

ErrorException: Undefined array key 1

PHP 8.1.2
9.20.0

I can read the Laravel.log just fine, but randomly I get the ErrorException above.

But I can't read the Schedule logs coming from Kernel. They are empty.

And not sure if it matters, but Composer said tgalopin/html-sanistizer is abandoned below.

C:\laragon\www\appinsta>composer require opcodesio/log-viewer
Info from https://repo.packagist.org: #StandWithUkraine
Using version ^1.2 for opcodesio/log-viewer
./composer.json has been updated
Running composer update opcodesio/log-viewer
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals

  • Locking opcodesio/log-viewer (v1.2.9)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 1 install, 0 updates, 0 removals
  • Downloading opcodesio/log-viewer (v1.2.9)
  • Installing opcodesio/log-viewer (v1.2.9): Extracting archive
    Package tgalopin/html-sanitizer is abandoned, you should avoid using it. Use symfony/html-sanitizer instead.
    Generating optimized autoload files

Screenshot 2022-09-05 131144

Division by zero and cautios overlay

By clicking on worker.log, which is an empty file, I get this failure
I attach a screenshot with what my Site display out. You see the failue message open as popup above the log viewer site.

#52 show to the Console.kernel, in wich I have all comment out. the queue is not running and is broken. So it had write a many errors bevor I clean lthe log files.

Division by zero {"userId":2,"exception":"[object] (DivisionByZeroError(code: 0): Division by zero at /var/www/html/vendor/opcodesio/log-viewer/src/LogReader.php:582)
[stacktrace]
#0 /var/www/html/vendor/opcodesio/log-viewer/src/Http/Livewire/LogList.php(108): Opcodes\LogViewer\LogReader->percentScanned()
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Opcodes\LogViewer\Http\Livewire\LogList->render()
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\Container\BoundMethod::call()
#6 /var/www/html/vendor/livewire/livewire/src/Component.php(173): Illuminate\Container\Container->call()
#7 /var/www/html/vendor/livewire/livewire/src/LifecycleManager.php(131): Livewire\Component->renderToView()
#8 /var/www/html/vendor/livewire/livewire/src/Connection/ConnectionHandler.php(14): Livewire\LifecycleManager->renderToView()
#9 /var/www/html/vendor/livewire/livewire/src/Controllers/HttpConnectionHandler.php(20): Livewire\Connection\ConnectionHandler->handle()
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(46): Livewire\Controllers\HttpConnectionHandler->__invoke()
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\Routing\ControllerDispatcher->dispatch()
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController()
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\Routing\Route->run()
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle()
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\View\Middleware\ShareErrorsFromSession->handle()
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest()
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Session\Middleware\StartSession->handle()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle()
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Cookie\Middleware\EncryptCookies->handle()
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\Pipeline\Pipeline->then()
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\Routing\Router->runRouteWithinStack()
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\Routing\Router->runRoute()
#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\Routing\Router->dispatchToRoute()
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\Routing\Router->dispatch()
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#35 /var/www/html/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\DisableBrowserCache->handle()
#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(36): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\HandleCors->handle()
#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline->then()
#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#52 /var/www/html/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle()
#53 {main}
"}
devisionbyzeroerror

Invalid hexadecimal escape sequence

Uncaught SyntaxError: Invalid hexadecimal escape sequence
at new AsyncFunction ()
at log-viewer?file=404ac811-laravel.log:1522:4916
at log-viewer?file=404ac811-laravel.log:1522:5074
at log-viewer?file=404ac811-laravel.log:1522:5093
at W (log-viewer?file=404ac811-laravel.log:1522:5386)
at D (log-viewer?file=404ac811-laravel.log:1522:4494)
at log-viewer?file=404ac811-laravel.log:1522:37902
at Function. (log-viewer?file=404ac811-laravel.log:1522:14707)
at n (log-viewer?file=404ac811-laravel.log:1522:8828)
at log-viewer?file=404ac811-laravel.log:1522:8855

Log Viewer doesn't work with Laravel VUE Spa application.

This log viewer should work properly regardless of the frontend technologies used. It should be an independent link showing logs regardless of the packages and technologies used in the project

[Vue Router warn]: No match found for location with path "/log-viewer"

Undefined variable $selectedFile on new install

I just did a new composer install to a new site, went to /log-viewer on my site and immediately got the error:

Undefined variable $selectedFile 

and the stack trace pointed to line 48 of resources/views/index.blade.php

In a recent commit, that line changed:

 -           @livewire('log-viewer::file-list', ['selectedFileIdentifier' => $selectedFileIdentifier])
 +           @livewire('log-viewer::file-list', ['selectedFileIdentifier' => $selectedFile?->identifier])

Switching it back to the previous version of that line seems to fix it.

Undefined array key on empty log

hello
i came across this bug when error log is empty like below

[2022-11-07 17:51:33] production.ERROR: 
production.ERROR: Undefined array key 1 {"userId":1,"exception":"[object] (ErrorException(code: 0): Undefined array key 1 at /var/app/vendor/opcodesio/log-viewer/src/Log.php:52)


[stacktrace]
#0 /var/app/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
#1 /var/app/vendor/opcodesio/log-viewer/src/Log.php(52): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->Illuminate\\Foundation\\Bootstrap\\{closure}()
#2 /var/app/vendor/opcodesio/log-viewer/src/LogReader.php(521): Opcodes\\LogViewer\\Log->__construct()
#3 /var/app/vendor/opcodesio/log-viewer/src/LogReader.php(472): Opcodes\\LogViewer\\LogReader->makeLog()
#4 /var/app/vendor/opcodesio/log-viewer/src/LogReader.php(431): Opcodes\\LogViewer\\LogReader->next()
#5 /var/app/vendor/opcodesio/log-viewer/src/LogReader.php(512): Opcodes\\LogViewer\\LogReader->get()
#6 /var/app/vendor/opcodesio/log-viewer/src/Http/Livewire/LogList.php(97): Opcodes\\LogViewer\\LogReader->paginate()
....
"} 

horizon log format changed

hello it seem that horizon changed the format of logs in latest version

   INFO  Processing jobs from the [default] queue.

  2022-09-17 20:02:54 App\Jobs\AddVisitorLogJob ................ 108.33ms DONE
  2022-09-17 20:02:54 App\Jobs\AddEmailLogJob ................... 21.74ms DONE
  2022-09-17 20:02:54 App\Jobs\AddEmailLogJob ................... 10.04ms DONE
  2022-09-17 20:02:57 App\Jobs\ChangeEmailTypeJob ................ 8.37ms DONE

   INFO  Processing jobs from the [default] queue.

  2022-09-17 20:02:57 App\Jobs\AddVisitorLogJob ................. 95.10ms DONE
  2022-09-17 20:02:57 App\Jobs\AddVisitorLogJob ................. 39.89ms DONE
  2022-09-17 20:02:57 App\Jobs\ChangeEmailTypeJob ............... 15.83ms DONE
  2022-09-17 20:02:57 App\Jobs\AddEmailLogJob ................... 10.97ms DONE
  2022-09-17 20:02:57 App\Jobs\AddEmailLogJob .................... 8.88ms DONE

the result is empty now

image

Error with Livewire after installation

Hi, just installed the package and was presented with this error upon clicking on a .log file in the panel on the left:

Livewire encountered corrupt data when trying to hydrate the [opcodes.log-viewer.http.livewire.log-list] component. Ensure that the [name, id, data] of the Livewire component wasn't tampered with between requests.

Does anyone have ideas on how to resolve?

Allowed memory size error caused by the package

Hi. I just added the package to my project and it looks really awesome. Thanks for the such a good tool ๐Ÿ”ฅ

I have only one problem, when I open log viewer, it triggers an error. PHP memory_limit is 128MB, and chunk size in config is set to 50MB.

IMG_20230104_005457

How can we deal with this?

Filtering by log type and then changing log causes fatal error

Hello - this package looks lovely, and I'm excited to use it in my app!

I've found a bug which I seem to be able to reproduce reliably.

  1. Select a log file from the left hand side
  2. Filter out 'Notice' (or any other log type) at the top

Screenshot 2022-08-30 at 16 34 15

  1. Change log file to a different one

Screenshot 2022-08-30 at 16 34 20

This then causes a fatal error, as demonstrated below.

Let me know if you require any more info. Cheers!

Undefined array key 1 {"view":{"view":"/var/www/app/vendor/opcodesio/log-viewer/resources/views/index.blade.php","data":[]},"exception":"[object] (Spatie\\LaravelIgnition\\Exceptions\\ViewException(code: 0): Undefined array key 1 at /var/www/app/vendor/opcodesio/log-viewer/src/Log.php:52)
[stacktrace]
#0 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
#1 /var/www/app/vendor/opcodesio/log-viewer/src/Log.php(52): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->Illuminate\\Foundation\\Bootstrap\\{closure}()
#2 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(572): Opcodes\\LogViewer\\Log->__construct()
#3 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(535): Opcodes\\LogViewer\\LogReader->makeLog()
#4 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(499): Opcodes\\LogViewer\\LogReader->next()
#5 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(563): Opcodes\\LogViewer\\LogReader->get()
#6 /var/www/app/vendor/opcodesio/log-viewer/src/Http/Livewire/LogList.php(74): Opcodes\\LogViewer\\LogReader->paginate()
#7 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Opcodes\\LogViewer\\Http\\Livewire\\LogList->render()
#8 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#9 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#10 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#11 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call()
#12 /var/www/app/vendor/livewire/livewire/src/Component.php(173): Illuminate\\Container\\Container->call()
#13 /var/www/app/vendor/livewire/livewire/src/LifecycleManager.php(131): Livewire\\Component->renderToView()
#14 /var/www/app/vendor/livewire/livewire/src/LivewireManager.php(108): Livewire\\LifecycleManager->renderToView()
#15 /var/www/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(338): Livewire\\LivewireManager->mount()
#16 /var/www/app/vendor/opcodesio/log-viewer/src/../resources/views/index.blade.php(52): Illuminate\\Support\\Facades\\Facade::__callStatic()
#17 /var/www/app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(109): require('...')
#18 /var/www/app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(110): Illuminate\\Filesystem\\Filesystem::Illuminate\\Filesystem\\{closure}()
#19 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\\Filesystem\\Filesystem->getRequire()
#20 /var/www/app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(69): Illuminate\\View\\Engines\\PhpEngine->evaluatePath()
#21 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Livewire\\LivewireViewCompilerEngine->evaluatePath()
#22 /var/www/app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(35): Illuminate\\View\\Engines\\CompilerEngine->get()
#23 /var/www/app/vendor/laravel/framework/src/Illuminate/View/View.php(139): Livewire\\LivewireViewCompilerEngine->get()
#24 /var/www/app/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#25 /var/www/app/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#26 /var/www/app/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\\View\\View->render()
#27 /var/www/app/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\\Http\\Response->setContent()
#28 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(833): Illuminate\\Http\\Response->__construct()
#29 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(802): Illuminate\\Routing\\Router::toResponse()
#30 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\\Routing\\Router->prepareResponse()
#31 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#32 /var/www/app/app/Http/Middleware/EnforceOIDCAuth.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\EnforceOIDCAuth->handle()
#34 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#36 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#37 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#38 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#40 /var/www/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /var/www/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#42 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\StartSession->handle()
#43 /var/www/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#45 /var/www/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#47 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#48 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\\Pipeline\\Pipeline->then()
#49 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\\Routing\\Router->runRouteWithinStack()
#50 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\\Routing\\Router->runRoute()
#51 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\\Routing\\Router->dispatchToRoute()
#52 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
#53 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#54 /var/www/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\\Laravel\\Http\\SetRequestIpMiddleware->handle()
#56 /var/www/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\\Laravel\\Http\\SetRequestMiddleware->handle()
#58 /var/www/app/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#59 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\\DisableBrowserCache->handle()
#60 /var/www/app/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#61 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle()
#62 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#63 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#64 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#65 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#66 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#67 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#68 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#69 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#70 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#71 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#72 /var/www/app/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#73 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Fruitcake\\Cors\\HandleCors->handle()
#74 /var/www/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#75 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#76 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#77 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
#78 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#79 /var/www/app/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#80 {main}

[previous exception] [object] (ErrorException(code: 0): Undefined array key 1 at /var/www/app/vendor/opcodesio/log-viewer/src/Log.php:52)
[stacktrace]
#0 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
#1 /var/www/app/vendor/opcodesio/log-viewer/src/Log.php(52): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->Illuminate\\Foundation\\Bootstrap\\{closure}()
#2 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(572): Opcodes\\LogViewer\\Log->__construct()
#3 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(535): Opcodes\\LogViewer\\LogReader->makeLog()
#4 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(499): Opcodes\\LogViewer\\LogReader->next()
#5 /var/www/app/vendor/opcodesio/log-viewer/src/LogReader.php(563): Opcodes\\LogViewer\\LogReader->get()
#6 /var/www/app/vendor/opcodesio/log-viewer/src/Http/Livewire/LogList.php(74): Opcodes\\LogViewer\\LogReader->paginate()
#7 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Opcodes\\LogViewer\\Http\\Livewire\\LogList->render()
#8 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#9 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()
#10 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()
#11 /var/www/app/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call()
#12 /var/www/app/vendor/livewire/livewire/src/Component.php(173): Illuminate\\Container\\Container->call()
#13 /var/www/app/vendor/livewire/livewire/src/LifecycleManager.php(131): Livewire\\Component->renderToView()
#14 /var/www/app/vendor/livewire/livewire/src/LivewireManager.php(108): Livewire\\LifecycleManager->renderToView()
#15 /var/www/app/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(338): Livewire\\LivewireManager->mount()
#16 /var/www/app/storage/framework/views/d3d0feb23edbf8786ffcc3fab9335e3865e6f626.php(70): Illuminate\\Support\\Facades\\Facade::__callStatic()
#17 /var/www/app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(109): require('...')
#18 /var/www/app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(110): Illuminate\\Filesystem\\Filesystem::Illuminate\\Filesystem\\{closure}()
#19 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(58): Illuminate\\Filesystem\\Filesystem->getRequire()
#20 /var/www/app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(69): Illuminate\\View\\Engines\\PhpEngine->evaluatePath()
#21 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(61): Livewire\\LivewireViewCompilerEngine->evaluatePath()
#22 /var/www/app/vendor/livewire/livewire/src/ComponentConcerns/RendersLivewireComponents.php(35): Illuminate\\View\\Engines\\CompilerEngine->get()
#23 /var/www/app/vendor/laravel/framework/src/Illuminate/View/View.php(139): Livewire\\LivewireViewCompilerEngine->get()
#24 /var/www/app/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#25 /var/www/app/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#26 /var/www/app/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\\View\\View->render()
#27 /var/www/app/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\\Http\\Response->setContent()
#28 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(833): Illuminate\\Http\\Response->__construct()
#29 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(802): Illuminate\\Routing\\Router::toResponse()
#30 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\\Routing\\Router->prepareResponse()
#31 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#32 /var/www/app/app/Http/Middleware/EnforceOIDCAuth.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\EnforceOIDCAuth->handle()
#34 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#36 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#37 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#38 /var/www/app/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#40 /var/www/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /var/www/app/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#42 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Session\\Middleware\\StartSession->handle()
#43 /var/www/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#45 /var/www/app/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#47 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#48 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\\Pipeline\\Pipeline->then()
#49 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\\Routing\\Router->runRouteWithinStack()
#50 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\\Routing\\Router->runRoute()
#51 /var/www/app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\\Routing\\Router->dispatchToRoute()
#52 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
#53 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#54 /var/www/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\\Laravel\\Http\\SetRequestIpMiddleware->handle()
#56 /var/www/app/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\\Laravel\\Http\\SetRequestMiddleware->handle()
#58 /var/www/app/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#59 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\\DisableBrowserCache->handle()
#60 /var/www/app/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#61 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle()
#62 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#63 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#64 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#65 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#66 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#67 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#68 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#69 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#70 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#71 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#72 /var/www/app/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#73 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Fruitcake\\Cors\\HandleCors->handle()
#74 /var/www/app/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#75 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#76 /var/www/app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#77 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
#78 /var/www/app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#79 /var/www/app/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#80 {main}
"} 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.