PHPackages                             marick/laravel-google-cloud-logging - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. marick/laravel-google-cloud-logging

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

marick/laravel-google-cloud-logging
===================================

v3.0.0(2mo ago)345.8k↑21%MITPHPCI passing

Since Apr 25Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/marickvantuil/laravel-google-cloud-logging)[ Packagist](https://packagist.org/packages/marick/laravel-google-cloud-logging)[ GitHub Sponsors](https://github.com/marickvantuil)[ RSS](/packages/marick-laravel-google-cloud-logging/feed)WikiDiscussions master Synced 4d ago

READMEChangelog (9)Dependencies (12)Versions (13)Used By (0)

Companion packages: [Cloud Scheduler](https://github.com/stackkit/laravel-google-cloud-scheduler), [Cloud Tasks](https://github.com/stackkit/laravel-google-cloud-tasks-queue)

Introduction
============

[](#introduction)

This package lets you use Google Cloud Logging as the log driver for Laravel.

The package will automatically detect the environment it's running in (supports Cloud Run, App Engine, and GKE), and attach the correct labels to the log entry so the logs appear in the application service.

This package requires Laravel 12 or 13.

Installation
============

[](#installation)

Install the package with Composer:

```
composer require marick/laravel-google-cloud-logging
```

Add a new logging channel in `config/logging.php`:

```
'google_cloud' => [
    'driver' => 'google_cloud',
    'location' => env('GOOGLE_CLOUD_LOGGING_LOCATION'),
],
```

Use the new channel:

```
LOG_CHANNEL=google_cloud
```

Important

A location is mandatory to make log entries appear in Cloud Run or App Engine.

How to
======

[](#how-to)

Use log context
---------------

[](#use-log-context)

```
use Illuminate\Support\Facades\Log;

Log::debug('user logged in', [
    'user' => 5,
]);
```

Context is nested under `logContext` in the JSON payload, supports any structure:

```
{
  "jsonPayload": {
    "message": "user logged in",
    "logContext": {
      "user": 5
    }
  }
}
```

Use `Context`
-------------

[](#use-context)

```
use Illuminate\Support\Facades\Context;
use Illuminate\Support\Facades\Log;

Context::add('user', 5);

Log::alert('user logged in');
```

Laravel `Context` values are nested under `laravelContext` in the JSON payload:

```
{
  "jsonPayload": {
    "message": "user logged in",
    "laravelContext": {
      "user": 5
    }
  }
}
```

Add labels
----------

[](#add-labels)

GCP labels are flat string key-value pairs, useful for filtering across log entries. There are three ways to add them:

**Via config** — applied to every log entry in the channel:

```
'google_cloud' => [
    'driver' => 'google_cloud',
    'labels' => ['environment' => 'production'],
],
```

**Per log entry** — pass a `labels` key in the log context:

```
Log::debug('user logged in', [
    'labels' => ['request_id' => $requestId],
]);
```

**Per request** — set once (e.g. in middleware), applied to all log entries for the request:

```
use Marick\LaravelGoogleCloudLogging\CloudLogging;

CloudLogging::withLabels(['tenant_id' => $tenantId]);

// Or lazily via a closure, resolved at log time:
CloudLogging::withLabels(fn () => ['user_id' => auth()->id()]);
```

Configure the log name
----------------------

[](#configure-the-log-name)

By default, log entries are written to the `laravel` log. You can change this per channel:

```
'google_cloud' => [
    'driver' => 'google_cloud',
    'location' => env('GOOGLE_CLOUD_LOGGING_LOCATION'),
    'log_name' => env('GOOGLE_CLOUD_LOG_NAME', 'laravel'),
],
```

Automatic enrichment
--------------------

[](#automatic-enrichment)

Every log entry is automatically enriched with the following:

### HTTP request

[](#http-request)

```
{
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "https://example.com/users",
    "userAgent": "Mozilla/5.0 ...",
    "remoteIp": "1.2.3.4",
    "referer": "https://example.com",
    "protocol": "HTTPS"
  }
}
```

### Source location

[](#source-location)

```
{
  "sourceLocation": {
    "file": "/var/www/html/app/Http/Controllers/UserController.php",
    "line": "42",
    "function": "App\\Http\\Controllers\\UserController::store"
  }
}
```

### Trace correlation

[](#trace-correlation)

When the `X-Cloud-Trace-Context` header is present (injected automatically on Cloud Run and behind GCP load balancers), trace information is attached to link log entries to Cloud Trace. Requires `GOOGLE_CLOUD_PROJECT` (or `GCLOUD_PROJECT`) to be set.

```
{
  "trace": "projects/my-project/traces/105445aa7843bc8bf206b12000100000",
  "spanId": "1",
  "traceSampled": true
}
```

### Resource detection

[](#resource-detection)

The package detects the runtime environment and sets the correct GCP resource type so logs surface in the right place.

**Cloud Run** — detected via `K_SERVICE` and `K_REVISION`:

```
{
  "resource": {
    "type": "cloud_run_revision",
    "labels": { "service_name": "my-service", "revision_name": "my-service-00001-abc", "location": "europe-west1" }
  }
}
```

**App Engine** — detected via `GAE_SERVICE` and `GAE_VERSION`:

```
{
  "resource": {
    "type": "gae_app",
    "labels": { "module_id": "my-service", "version_id": "v1" }
  }
}
```

**GKE** — detected via `KUBERNETES_SERVICE_HOST` (automatically present in all pods). Set the following env vars via the [Downward API](https://kubernetes.io/docs/concepts/workloads/pods/downward-api/) to populate the resource labels:

Env varResource label`KUBERNETES_CLUSTER_NAME``cluster_name``KUBERNETES_NAMESPACE``namespace_name``KUBERNETES_POD_NAME``pod_name``KUBERNETES_CONTAINER_NAME``container_name`

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance84

Actively maintained with recent releases

Popularity34

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~90 days

Recently: every ~179 days

Total

9

Last Release

82d ago

Major Versions

v1.0.0 → v2.0.02025-03-06

v2.0.0 → v3.0.02026-04-13

### Community

Maintainers

![](https://www.gravatar.com/avatar/a7bb0c8615315147d44be10ad68e07267ad27b6ef74bdca5a566f5a4e443045e?d=identicon)[Marick](/maintainers/Marick)

---

Top Contributors

[![marickvantuil](https://avatars.githubusercontent.com/u/647007?v=4)](https://github.com/marickvantuil "marickvantuil (37 commits)")

###  Code Quality

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/marick-laravel-google-cloud-logging/health.svg)

```
[![Health](https://phpackages.com/badges/marick-laravel-google-cloud-logging/health.svg)](https://phpackages.com/packages/marick-laravel-google-cloud-logging)
```

###  Alternatives

[google/cloud-error-reporting

Stackdriver Error Reporting Client for PHP

214.4M30](/packages/google-cloud-error-reporting)[gluedev/laravel-stackdriver

Enables logging, tracing and error reporting to Google Stackdriver for the Laravel framework

4865.8k](/packages/gluedev-laravel-stackdriver)[codeinternetapplications/monolog-stackdriver

Stackdriver handler for Monolog.

14185.1k](/packages/codeinternetapplications-monolog-stackdriver)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
