Tệp nhật ký Laravel không được tạo

Laravel, một framework phổ biến để xây dựng các dự án PHP, có một hệ thống ghi nhật ký mạnh mẽ cho phép bạn gửi thông điệp tường trình tới các tệp, nhật ký hệ thống và nhiều đích đến khác. Đăng nhập Laravel dựa trên kênh và mỗi kênh xác định một cách viết thông điệp tường trình cụ thể. Ví dụ: kênh

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2 ghi tệp nhật ký vào một tệp nhật ký duy nhất, trong khi kênh
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
3 gửi thông báo nhật ký tới Slack

Laravel logging được tạo trên Monolog  , đây là một thư viện ghi nhật ký mạnh mẽ cho các dự án PHP. Chúng tôi đã trình bày chuyên sâu về Monolog trong bài viết này, vì vậy chúng tôi sẽ chủ yếu tập trung vào các phần cụ thể của Laravel tại đây

🔭 Bạn muốn tập trung và giám sát nhật ký ứng dụng Laravel của mình?

Truy cập Logtail và bắt đầu nhập nhật ký của bạn sau 5 phút

điều kiện tiên quyết

Bạn cần cài đặt phiên bản PHP và Composer mới nhất trên máy tính của mình. Bạn cũng nên tạo một dự án Laravel mới để có thể kiểm tra các đoạn mã trong bài viết này. Bạn có thể tham khảo Laravel's để biết chi tiết về cách tạo dự án mới trên máy của mình

Khám phá tệp cấu hình ghi nhật ký

Các dự án Laravel bao gồm một thư mục

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
4 chứa một số tệp cấu hình được sử dụng để tùy chỉnh các khía cạnh khác nhau của dự án, chẳng hạn như thiết lập cơ sở dữ liệu, bộ nhớ đệm, quản lý phiên, v.v. Ngoài ra, các tùy chọn cấu hình liên quan đến ghi nhật ký cũng có trong thư mục này trong tệp
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
5. Hãy tiếp tục và mở tệp này trong trình chỉnh sửa của bạn để kiểm tra nội dung của nó

 env["LOG_CHANNEL", "stack"],

    "deprecations" => [
        "channel" => env["LOG_DEPRECATIONS_CHANNEL", "null"],
        "trace" => false,
    ],

    "channels" => [
        "stack" => [
            "driver" => "stack",
            "channels" => ["single", "daily"],
            "ignore_exceptions" => false,
        ],
        "single" => [
            "driver" => "single",
            "path" => storage_path["logs/laravel.log"],
            "level" => env["LOG_LEVEL", "debug"],
        ],
        "daily" => [
            "driver" => "daily",
            "path" => storage_path["logs/laravel.log"],
            "level" => env["LOG_LEVEL", "debug"],
            "days" => 14,
        ],

        . . .
    ],
];

Lưu ý cách nhập ba trình xử lý Monolog ở đầu tệp. Điều này xác nhận những gì chúng tôi đã giải thích trước đó về việc ghi nhật ký Laravel dựa trên Monolog. Bên dưới phần nhập, bạn có thể thấy ba tùy chọn riêng biệt trong mảng được tệp cấu hình trả về

Tùy chọn

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
6 chỉ định kênh mặc định để ghi tất cả các thông điệp tường trình do Laravel tạo ra. Giá trị được cung cấp cho tùy chọn này phải khớp với kênh được xác định bởi mảng
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
7. Trong đoạn mã trên, giá trị của biến môi trường
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
8 [được xác định trong tệp
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
9 của bạn] sẽ được sử dụng theo mặc định nếu nó tồn tại. Nếu không, nó sẽ rơi trở lại kênh
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0. Nếu bạn kiểm tra tệp
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
9 ở thư mục gốc của dự án, bạn sẽ nhận thấy rằng biến
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
8 cũng được đặt thành
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0 theo mặc định

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .

Tùy chọn

. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
4 cho phép bạn kiểm soát nơi đặt các cảnh báo không dùng nữa từ PHP, Laravel và các thư viện bên thứ ba khác. Điều này sử dụng biến môi trường
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
5 [được đặt thành
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
6 theo mặc định] có nghĩa là các cảnh báo không dùng nữa sẽ bị bỏ qua. Ghi lại các thông báo như vậy rất hữu ích khi chuẩn bị nâng cấp phiên bản lớn, vì vậy bạn nên đặt biến này thành kênh hợp lệ. Bạn cũng có thể xác định một kênh
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
4 đặc biệt cho mục đích này và nó sẽ luôn được sử dụng để ghi nhật ký những lần không dùng nữa bất kể giá trị của khóa
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
4 cấp cao nhất

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]

Cuối cùng, tùy chọn

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
7 là phần quan trọng nhất của tệp vì đây là nơi xác định và định cấu hình tất cả các kênh ghi nhật ký. Một ví dụ được hiển thị trong đoạn mã trước ở trên. Chúng tôi đã xác định một kênh có tên là
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
4 sử dụng
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2. Trình điều khiển này xác định cách các thông báo nhật ký được gửi đến kênh tương ứng được ghi lại. Chẳng hạn, trình điều khiển
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2 ghi tất cả các thông báo nhật ký vào một tệp cục bộ như được chỉ định bởi tùy chọn
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
3, trong trường hợp này là
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
4. Nếu tệp được chỉ định không tồn tại, Laravel sẽ tự động tạo tệp đó

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]

Một tùy chọn khác có thể định cấu hình trên các kênh là

. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
5 [được đánh dấu ở trên] và tùy chọn này chỉ định mức nhật ký tối thiểu của kênh. Cấp độ nhật ký là một cách để chúng tôi phân loại các thông báo khác nhau dựa trên mức độ khẩn cấp của chúng và tùy chọn
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
5 xác định cấp độ nhật ký tối thiểu mà kênh phải ghi lại thông báo. Đối với kênh
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2, tùy chọn này được xác định bởi giá trị của biến môi trường
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
8 [được đặt thành
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
9 theo mặc định] và giảm xuống thành
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
9 nếu biến
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
8 không có trong môi trường

Hiểu trình điều khiển kênh

Trong phần này, chúng ta sẽ xem xét kỹ hơn về channel driver trong Laravel và cách sử dụng chúng. Chúng ta đã thấy trình điều khiển

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2, trình điều khiển này ghi các thông báo vào một tệp duy nhất trên đĩa cục bộ. Trình điều khiển
. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .
3 tương tự như
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2 vì nó cũng ghi vào một tệp, nhưng nó quay vòng hàng ngày và tự động xóa nhật ký cũ. Nó sử dụng
. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .
5 của Monolog dưới mui xe. Đây là cách nó thường được cấu hình

. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .

Trình điều khiển

. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .
3 này sẽ tạo một tệp nhật ký mỗi ngày ở định dạng
. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .
7. Tùy chọn
. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .
8 chỉ định thời gian lưu giữ từng tệp nhật ký, nghĩa là các tệp cũ hơn 14 ngày sẽ bị xóa. Nói chung, tốt hơn là nên chọn trình điều khiển
. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .
3 thay vì
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2 để các tệp nhật ký riêng lẻ không phát triển quá lớn và trở nên khó sử dụng. Một giải pháp khác là tiếp tục sử dụng trình điều khiển
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
2 và thực hiện xoay vòng tệp nhật ký bằng tiện ích tiêu chuẩn như logrotate

. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .

Trình điều khiển

 [
    "driver"  => "monolog",

"handler" => Monolog\Handler\FilterHandler::class,

"handler" => new StreamHandler[storage_path["logs/info.log"]],

"minLevelOrList" => [Monolog\Logger::INFO],

],
2 và
 [
    "driver"  => "monolog",

"handler" => Monolog\Handler\FilterHandler::class,

"handler" => new StreamHandler[storage_path["logs/info.log"]],

"minLevelOrList" => [Monolog\Logger::INFO],

],
3 hoạt động rất giống nhau. Cả hai đều ghi vào nhật ký hệ thống, ngoại trừ trình điều khiển
 [
    "driver"  => "monolog",

"handler" => Monolog\Handler\FilterHandler::class,

"handler" => new StreamHandler[storage_path["logs/info.log"]],

"minLevelOrList" => [Monolog\Logger::INFO],

],
2 gọi hàm syslog[] của PHP và trình điều khiển
 [
    "driver"  => "monolog",

"handler" => Monolog\Handler\FilterHandler::class,

"handler" => new StreamHandler[storage_path["logs/info.log"]],

"minLevelOrList" => [Monolog\Logger::INFO],

],
3 gọi hàm error_log[]. Bạn có thể tìm hiểu thêm về cách các chức năng này hoạt động trong bài viết của chúng tôi về đăng nhập trong PHP

Trình điều khiển

. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0 cho phép bạn ghi một tin nhắn vào nhiều kênh cùng một lúc bằng cách sử dụng tùy chọn
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
7 của nó. Ví dụ

. . .
    "channels" => [
        "stack" => [
            "driver" => "stack",

"channels" => ["one", "two", "three"],

"ignore_exceptions" => false, ], "one" => [ "driver" => "single", "path" => storage_path["logs/laravel_1.log"], "level" => "debug", ], "two" => [ "driver" => "single", "path" => storage_path["logs/laravel_2.log"], "level" => "warning", ], "three" => [ "driver" => "single", "path" => storage_path["logs/laravel_3.log"], "level" => "error", ], ], . . .

Tùy chọn

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
7 được đánh dấu ở trên liên kết các kênh
 [
    "driver"  => "monolog",

"handler" => Monolog\Handler\FilterHandler::class,

"handler" => new StreamHandler[storage_path["logs/info.log"]],

"minLevelOrList" => [Monolog\Logger::INFO],

],
9,
. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
0 và
. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
1 với nhau để bạn có thể đăng nhập đồng thời vào cả ba kênh bằng cách gọi kênh
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0

Bạn có thể kiểm soát thêm cách hoạt động của tính năng ghi nhật ký trong ứng dụng của mình bằng cách sử dụng trình điều khiển hai kênh sau đây. trình điều khiển

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
3 để gọi trực tiếp bất kỳ trình xử lý Monolog nào và trình điều khiển
. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
4 để tạo trình ghi nhật ký tùy chỉnh bằng cách sử dụng các nhà máy

Vì quá trình ghi nhật ký của Laravel dựa trên thư viện Monolog nên chúng tôi có thể truy cập bất kỳ trình xử lý nào của nó bằng cách sử dụng trình điều khiển

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
3 như hình bên dưới

 [
    "driver"  => "monolog",

"handler" => Monolog\Handler\FilterHandler::class,

"handler" => new StreamHandler[storage_path["logs/info.log"]],

"minLevelOrList" => [Monolog\Logger::INFO],

],

Trong phần được đánh dấu, chúng tôi có tùy chọn

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
6 chỉ định trình xử lý Monolog mà chúng tôi sẽ sử dụng là
. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
7 trong ví dụ này. Trình xử lý này cho phép chúng tôi chỉ định các mức nhật ký cụ thể cho kênh, thay vì mức tối thiểu sao cho chỉ các mục khớp với các mức đã chỉ định mới được ghi vào kênh

Tiếp theo, tùy chọn

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
8 là nơi chúng tôi chuyển một số thông tin được yêu cầu bởi trình xử lý Monolog đã chọn. Trong ví dụ này, tùy chọn
. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
6 thứ hai được sử dụng để chỉ định rằng nên sử dụng
code app/Logging/CreateCustomLogger.php
0 để ghi nhật ký các tin nhắn được gửi tới kênh
code app/Logging/CreateCustomLogger.php
1 vào một tệp cục bộ

Tùy chọn

code app/Logging/CreateCustomLogger.php
2 xác định một hoặc nhiều mức nhật ký sẽ được ghi lại đến đích được xác định trong kênh. Trong trường hợp này, chỉ các mục cấp độ
code app/Logging/CreateCustomLogger.php
3 sẽ được ghi vào tệp
code app/Logging/CreateCustomLogger.php
4. Bạn có thể đọc thêm về trình xử lý Monolog trong bài viết này

Khi bạn cần mức tùy chỉnh cao hơn nữa cho dự án của mình, bạn có thể tạo một kênh tùy chỉnh hoàn toàn bằng trình điều khiển

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
4

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],

Sau đó, chúng tôi có thể tạo tệp

code app/Logging/CreateCustomLogger.php
6 nơi chúng tôi có thể tạo kênh ghi nhật ký tùy chỉnh hoàn toàn bằng Monolog

code app/Logging/CreateCustomLogger.php

ứng dụng/Ghi nhật ký/TạoCustomLogger. php

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
0

code app/Logging/CreateCustomLogger.php
7 là nghiêm trọng nhất và
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
9 là ít nghiêm trọng nhất

  • code app/Logging/CreateCustomLogger.php
    
    9. có nghĩa là ứng dụng không sử dụng được và sự cố cần được giải quyết ngay lập tức
  • . . .
    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug
    . . .
    
    00. tương tự như
    code app/Logging/CreateCustomLogger.php
    
    9, nhưng ít nghiêm trọng hơn
  • . . .
    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug
    . . .
    
    02. lỗi nghiêm trọng trong một khía cạnh cốt lõi của ứng dụng của bạn
  • . . .
    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug
    . . .
    
    03. điều kiện lỗi trong ứng dụng của bạn
  • . . .
    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug
    . . .
    
    04. một cái gì đó bất thường đã xảy ra có thể cần phải được giải quyết sau
  • . . .
    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug
    . . .
    
    05. tương tự như
    code app/Logging/CreateCustomLogger.php
    
    3 nhưng quan trọng hơn
  • code app/Logging/CreateCustomLogger.php
    
    3. thông báo thông tin mô tả hoạt động bình thường của chương trình
  • . . .
    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug
    . . .
    
    08. được sử dụng để ghi lại một số thông báo gỡ lỗi

Không có tiêu chuẩn về những điều kiện nên được coi là

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
00,
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
02,
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
04, v.v. Tất cả phụ thuộc vào mục đích của chương trình bạn đang viết. Ví dụ: hãy tưởng tượng một ứng dụng thương mại điện tử nơi người dùng có thể mua các mặt hàng. Bạn có thể ghi lại các đơn đặt hàng thành công bằng cách sử dụng cấp độ
code app/Logging/CreateCustomLogger.php
3 và các đơn đặt hàng không thành công do một số API bên ngoài bị lỗi bằng cách sử dụng cấp độ
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
03

Đây là cách sử dụng các mức nhật ký trên trong ứng dụng Laravel

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
1

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
2

Lưu ý cách cấp nhật ký được bao gồm ngay trước thông báo tường trình ở trên. Điều này giúp bạn hiểu nhanh từng mục bằng cách chú thích mức độ nghiêm trọng của sự kiện để bạn biết nơi cần tập trung nỗ lực của mình. Nếu bạn gửi nhật ký của mình đến dịch vụ quản lý nhật ký, bạn có thể thiết lập giám sát nhật ký dựa trên các cấp độ này, để bạn được cảnh báo kịp thời về các sự kiện đáng chú ý trong ứng dụng của mình

Tạo ngăn xếp nhật ký

Trong phần này, chúng tôi sẽ trình bày cách sử dụng trình điều khiển kênh

. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0 để tạo hệ thống ghi nhật ký cơ bản cho ứng dụng Laravel. Quay trở lại tệp
"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
5 và thay thế các cấu hình kênh mặc định bằng các dòng sau

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
3

Chúng tôi đã tạo ba kênh duy nhất, mỗi kênh có mức nhật ký tối thiểu khác nhau và chúng tôi đã kết hợp chúng trong kênh

. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0 bằng trình điều khiển
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0. Nhớ lại rằng tùy chọn
. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
5 xác định mức tối thiểu mà thông báo phải được kênh ghi lại. Vì vậy, trong ví dụ này, nếu chúng ta có một thông báo cấp độ
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
08, nó sẽ không được ghi lại bởi bất kỳ kênh nào vì
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
08 ít nghiêm trọng hơn
code app/Logging/CreateCustomLogger.php
3,
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
04 và
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
02. Tuy nhiên, nếu chúng tôi có một thông báo cấp
code app/Logging/CreateCustomLogger.php
9, nó sẽ được ghi lại bởi cả ba kênh

Trong hệ thống ghi nhật ký này, tệp

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
25 sẽ chứa tất cả các bản ghi nhật ký ngoại trừ thông báo gỡ lỗi. Tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
26 sẽ bao gồm tất cả các hồ sơ mà bạn nên chú ý đến [
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
27 hoặc nghiêm trọng hơn] và tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
28 sẽ chứa tất cả các vấn đề có khả năng xảy ra cần được giải quyết ngay lập tức

Vấn đề với hệ thống này là nó có thể dẫn đến lãng phí tài nguyên lưu trữ do lặp lại nhật ký trong mỗi tệp. Sẽ tốt hơn nếu chúng ta có thể xác định một tập hợp các mức nhật ký có thể chấp nhận được cho mỗi trình xử lý thay vì chỉ mức tối thiểu. Laravel không cung cấp một cách tự nhiên để thiết lập một hệ thống như vậy, nhưng nó có thể đạt được bằng cách sử dụng

. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
7 đã thảo luận trước đó

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
4

Trong ví dụ này, kênh

. . .
"syslog" => [
    "driver" => "syslog",
    "level" => env["LOG_LEVEL", "debug"],
],

"errorlog" => [
    "driver" => "errorlog",
    "level" => env["LOG_LEVEL", "debug"],
],
. . .
9 sẽ chỉ ghi lại các tin nhắn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
08, kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
32 sẽ ghi lại các tin nhắn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
05 và
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
04, và
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
35 sẽ đẩy các tin nhắn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
00 và
code app/Logging/CreateCustomLogger.php
9 một kênh Telegram thông qua
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
38

Để thiết lập

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
38, trước tiên bạn cần tạo bot Telegram thông qua BotFather. Mở liên kết trong ứng dụng khách Telegram và bắt đầu cuộc trò chuyện bằng cách gửi tin nhắn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
40. Bạn sẽ nhận được một thông báo với các bước tiếp theo để tạo bot của bạn

Làm theo hướng dẫn để tạo tên người dùng và tên bot mới và bạn sẽ nhận được khóa API sau khi hoàn tất. Bạn có thể sử dụng khóa API này để truy cập bot của mình

Tiếp theo, tạo một kênh Telegram công khai và thêm bot vào kênh. Cuối cùng, sử dụng khóa API và tên kênh [có tiền tố

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
41] để tạo phiên bản mới của
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
38

Lần này, nếu bạn đẩy một tin nhắn cấp

code app/Logging/CreateCustomLogger.php
9, nó chỉ nên đi qua kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
35

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
5

Bạn sẽ nhận được những tin nhắn như thế này trên Telegram

Gửi một thông điệp tường trình

Cho đến nay, chúng ta chủ yếu thảo luận về cấu hình ghi nhật ký của Laravel, vì vậy đã đến lúc chúng ta đưa những gì đã học để thực hành vào mã ứng dụng. Chuyển đến thư mục

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
45 và mở tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
46. Chúng tôi sẽ tạo một tuyến đường mới và ghi lại một tin nhắn bất cứ khi nào người dùng truy cập nó. Lưu ý rằng chúng tôi đang sử dụng thiết lập kênh nhật ký
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0 từ phần trước

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6

Mặt tiền

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
48 của Laravel đang được sử dụng để ghi thông báo tường trình và phương thức
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
49 được sử dụng để ghi thông báo cấp độ
code app/Logging/CreateCustomLogger.php
3. Để thấy điều này hoạt động, hãy khởi chạy máy chủ phát triển bằng cách chạy lệnh sau trong thiết bị đầu cuối

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
7

Mở trình duyệt của bạn và truy cập

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
51; . Quay trở lại thiết bị đầu cuối và kiểm tra nội dung của thư mục
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
52. Bạn nên quan sát rằng có một tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
53. Kiểm tra nội dung của tập tin này như sau

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
8

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
9

Vì thông điệp tường trình này có cấp độ nhật ký

code app/Logging/CreateCustomLogger.php
3, nó sẽ chỉ được ghi bởi kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
55, vì vậy sẽ không có tệp nào khác chứa mục nhập này do chúng tôi sử dụng
. . .
"example-custom-channel" => [
    "driver" => "custom",
    "via" => App\Logging\CreateCustomLogger::class,
],
7 trong tệp cấu hình

Bạn có thể thêm một tuyến đường khác bên dưới để mô phỏng tình trạng lỗi trong ứng dụng

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
0

Mở trình duyệt của bạn và đi đến

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
57. Vì người dùng
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
58 không được tìm thấy trong mảng
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
59, nhật ký lỗi sẽ được ghi vào kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
60

Đăng nhập vào một kênh cụ thể

Cũng có thể đăng nhập vào một kênh cụ thể khác với kênh mặc định bằng cách sử dụng phương pháp

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
61 được hiển thị bên dưới

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
1

Thông báo được đánh dấu này sẽ được ghi trực tiếp vào kênh

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
55 mà không thông qua kênh
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0. Một điều cần lưu ý khi sử dụng một kênh cụ thể như thế này là thông báo phải tương ứng với các mức được định cấu hình trên kênh. Nếu bạn cố ghi nhật ký một tin nhắn
code app/Logging/CreateCustomLogger.php
3 tới
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
65, nó sẽ bị bỏ qua vì chỉ có nhật ký
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
05 và
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
04 được chấp nhận trên kênh

Thêm dữ liệu theo ngữ cảnh vào thông điệp tường trình

Trong các ví dụ của chúng tôi cho đến nay, chúng tôi chỉ ghi nhật ký các thông báo đơn giản, nhưng thường cần đưa thêm thông tin vào mục nhập nhật ký để cung cấp thêm ngữ cảnh về sự kiện khiến nó được ghi lại. Điều này có thể được thực hiện bằng cách thêm tham số thứ hai vào phương thức cấp nhật ký như thế này

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
2

Mở trình duyệt của bạn và đi đến

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
57. Quay trở lại thiết bị đầu cuối và kiểm tra bản ghi mới nhất trong tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
53 bằng lệnh bên dưới

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
3

Bạn nên quan sát một đối tượng được định dạng JSON ở cuối bản ghi nhật ký như thế này

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4

Nếu bạn cần kiểm soát nhiều hơn cách định dạng nhật ký trong Laravel, bạn có thể tùy chỉnh nó thông qua các trình định dạng của Monolog. Quay trở lại

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
70 và thêm tùy chọn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
71 cho kênh
. . .
"daily" => [
    "driver" => "daily",
    "path" => storage_path["logs/laravel.log"],
    "level" => env["LOG_LEVEL", "debug"],
    "days" => 14,
],
. . .
0

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
5

Tiếp theo, chúng ta cần tạo tệp

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
73

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
6

ứng dụng/Ghi nhật ký/Tùy chỉnh định dạng. php

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
7

Trong đoạn mã trên, Monolog's

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
74 được sử dụng để thay đổi định dạng của thông báo tường trình sao cho cấp độ nhật ký xuất hiện trước và mỗi phần của mục nhập nhật ký được phân tách bằng dấu gạch ngang [
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
75] ký tự. Khi bạn truy cập tuyến đường
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
76 và kiểm tra lại tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
53, bạn sẽ nhận thấy rằng định dạng cho mỗi mục hiện tại như sau

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
8

Nếu bạn muốn tìm hiểu thêm về cách định dạng các mục nhật ký của mình trong Laravel, hãy xem hướng dẫn bắt đầu của chúng tôi về Monolog

Tập trung và lưu trữ nhật ký của bạn

Cho đến nay, chúng tôi chủ yếu xem xét việc đăng nhập vào các tệp và chúng tôi cũng đã trình bày một cách cơ bản để thu hút sự chú ý đến các sự kiện quan trọng bằng cách gửi chúng đến một kênh Telegram. Bạn cũng có thể tổng hợp tất cả các nhật ký của mình vào một nơi để xử lý, giám sát và cảnh báo để bạn có thể xem và tương quan các nhật ký của mình một cách dễ dàng mà không cần phải đăng nhập vào từng máy chủ riêng lẻ

Logtail là một dịch vụ quản lý nhật ký cho phép bạn tập trung tất cả các nhật ký của mình chỉ trong vài phút và bạn chỉ cần một tài khoản miễn phí để thiết lập. Chúng tôi sẽ nhanh chóng trình bày cách gửi nhật ký Laravel của bạn tới Logtail trong phần này

Khi bạn đã đăng nhập vào Logtail, hãy truy cập trang Nguồn và nhấp vào nút Kết nối nguồn

Chọn PHP làm nền tảng của bạn và nhấp vào nút Tạo nguồn

Khi nguồn Logtail của bạn được tạo, hãy sao chép mã thông báo Nguồn vào khay nhớ tạm của bạn

Sau đó, chạy lệnh bên dưới trong dự án của bạn để cài đặt thư viện Logtail cho Monolog

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
9

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
0

Quay trở lại tệp

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
46 và định cấu hình gói Logtail như hình bên dưới [đảm bảo thay thế trình giữ chỗ
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
79]

"channels" => [
    "single" => [
        "driver" => "single",
        "path" => storage_path["logs/laravel.log"],

"level" => env["LOG_LEVEL", "debug"],

], ]
1

Từ thời điểm này trở đi, bạn có thể sử dụng

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
80 để gửi tất cả nhật ký của mình tới dịch vụ. Mỗi mục đã đăng nhập sẽ xuất hiện ngay lập tức trên trang đuôi trực tiếp như hình bên dưới

Logtail cũng cho phép bạn gửi các tin nhắn cụ thể tới email, Slack và các nền tảng khác. Bạn có thể tìm thấy tất cả chúng trong tab Tích hợp

Kết luận và các bước tiếp theo

Bài viết này đã thảo luận về một số khái niệm liên quan đến đăng nhập trong các ứng dụng Laravel, chẳng hạn như các kênh nhật ký, cấp độ nhật ký, ghi nhật ký theo ngữ cảnh và định dạng các mục nhập nhật ký. Do đó, giờ đây bạn sẽ được trang bị tốt để theo dõi lỗi và cải thiện toàn bộ trải nghiệm phát triển của mình, đặc biệt nếu bạn đang theo dõi nhật ký của mình thông qua Logtail

Lưu ý rằng chúng tôi mới chỉ giới thiệu sơ qua về đăng nhập Laravel trong bài viết này. Để mở khóa toàn bộ tiềm năng của nó, bạn phải tìm hiểu sâu hơn về thư viện Monolog cơ bản, cung cấp năng lượng cho toàn bộ cơ sở hạ tầng ghi nhật ký của nó

Cảm ơn đã đọc và chúc bạn đăng nhập vui vẻ

Nhật ký kể chuyện
Đọc chúng

Trải nghiệm SQL tương thích
quản lý nhật ký có cấu trúc

Khám phá ghi nhật ký →

Tập trung tất cả nhật ký của bạn vào một nơi

Phân tích, tương quan và lọc nhật ký với SQL

Tạo hành động
bảng điều khiển

Chia sẻ và bình luận với sự cộng tác tích hợp

Có một gợi ý bài viết?

Cách bắt đầu ghi nhật ký với Log4php

Tìm hiểu cách bắt đầu ghi nhật ký với Log4php và đi từ cơ bản đến thực tiễn tốt nhất ngay lập tức

Tác phẩm này được cấp phép theo Creative Commons Ghi công-Phi thương mại-Chia sẻ tương tự 4. 0 Giấy phép quốc tế

Làm cách nào để tạo tệp nhật ký trong laravel?

Sau đó, chạy lệnh sau để tạo dự án Laravel. .
nhà soạn nhạc tạo dự án laravel/nhật ký tùy chỉnh của laravel. .
cd nhật ký tùy chỉnh php nghệ nhân phục vụ. .
'mặc định' => env['LOG_CHANNEL', 'ngăn xếp'],.
'single' => [ 'driver' => 'single', 'path' => storage_path['logs/laravel

Tệp nhật ký laravel ở đâu?

Theo mặc định, Laravel được định cấu hình để tạo một tệp nhật ký duy nhất cho ứng dụng của bạn và tệp này được lưu trữ trong app/storage/logs/laravel. nhật ký .

Làm cách nào để tắt nhật ký laravel?

đi tới nhà cung cấp->laravel->framework->src->Illuminate->Log->Writer. php và sau đó nhận xét tất cả mã trong hàm __call như bên dưới. Nhật ký của bạn sẽ không bao giờ được lưu.

Làm cách nào để đăng nhập dữ liệu trong laravel?

Việc ghi nhật ký Laravel dựa trên "kênh" . Mỗi kênh đại diện cho một cách ghi thông tin nhật ký cụ thể. Ví dụ: kênh đơn ghi tệp nhật ký vào một tệp nhật ký duy nhất, trong khi kênh chùng gửi thông báo nhật ký tới Slack. Thông báo nhật ký có thể được ghi vào nhiều kênh dựa trên mức độ nghiêm trọng của chúng.

Chủ Đề