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

Ví dụ này tập trung vào tên tệp nhật ký tùy chỉnh của laravel. Bài viết này đi chi tiết về cách tạo tệp nhật ký tùy chỉnh trong laravel. Bài viết này sẽ cung cấp cho bạn ví dụ đơn giản về tệp nhật ký tùy chỉnh của laravel. đó là ví dụ đơn giản về tạo tệp nhật ký tùy chỉnh trong laravel. Thực hiện theo bước hướng dẫn dưới đây về cách tạo tệp nhật ký tùy chỉnh phiên bản laravel 6, laravel 7, laravel 8 và laravel 9

Laravel theo mặc định cung cấp lưu trữ/log/laravel. vị trí tệp nhật ký nơi nó sẽ hiển thị tệp nhật ký. nhưng đôi khi bạn có thể yêu cầu tạo tệp nhật ký với tác vụ cụ thể. ví dụ: nếu bạn đang làm việc với tác vụ thanh toán và bạn cần tất cả các tệp nhật ký riêng để ghi nhật ký thanh toán, để bạn có thể dễ dàng tìm ra giải pháp

ở đây, tôi sẽ cung cấp cho bạn một ví dụ rất đơn giản, vì vậy hãy xem cách thêm kênh tùy chỉnh với vị trí tệp nhật ký mới. thêm khóa mới "itsolution" trên mảng "kênh"

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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6 ghi tệp nhật ký vào một tệp nhật ký duy nhất, trong khi kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
7 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. Đây là thông tin chi tiết về những gì sẽ được thảo luận trong bài viết này

  • Tùy chỉnh hành vi ghi nhật ký của Laravel
  • Hiểu trình điều khiển kênh và cấp độ nhật ký
  • Tạo các kênh nhật ký
  • Đăng nhập vào một tệp và xoay các tệp nhật ký
  • Thêm ngữ cảnh vào thông điệp nhật ký của bạn
  • Cách truy cập chức năng Monolog cơ bản
  • Tập trung các bản ghi của bạn ở một nơi

đ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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
8 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
9. 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 ba trình xử lý Monolog được nhập ở đầ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" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
0 chỉ định kênh mặc định để viết 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" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
1. Trong đoạn mã trên, giá trị của biến môi trường
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
2 [được xác định trong tệp
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
3 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ẽ quay trở lại kênh
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4. Nếu bạn kiểm tra tệp
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
3 ở thư mục gốc của dự án, bạn sẽ nhận thấy rằng biến
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
2 cũng được đặt thành
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4 theo mặc định

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

Tùy chọn

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
8 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
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
9 [được đặt thành
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
60 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
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
8 đặ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
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
8 cấp cao nhất là gì

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

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
1 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à
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
8 sử dụng
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6. 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
67, trong trường hợp này là
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
68. Nếu tệp được chỉ định không tồn tại, Laravel sẽ tự động tạo tệp đó

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

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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
69 [đượ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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
69 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6, tùy chọn này được xác định bởi giá trị của biến môi trường
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
02 [được đặt thành
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
03 theo mặc định] và giảm xuống thành
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
03 nếu biến
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
02 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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6, 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
07 tương tự như
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
09 của Monolog dưới mui xe. Đây là cách nó thường được cấu hình

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

Trình điều khiển

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
07 này sẽ tạo một tệp nhật ký mỗi ngày ở định dạng
 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,
        ],

        . . .
    ],
];

01. Tùy chọ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,
        ],

        . . .
    ],
];

02 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
07 thay vì
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6 để 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
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
6 và thực hiện xoay vòng tệp nhật ký bằng tiện ích tiêu chuẩn như logrotate

 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,
        ],

        . . .
    ],
];

0

Trình điều khiể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,
        ],

        . . .
    ],
];

06 và
 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,
        ],

        . . .
    ],
];

07 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
 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,
        ],

        . . .
    ],
];

06 gọi hàm syslog[] của PHP và trình điều khiể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,
        ],

        . . .
    ],
];

07 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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4 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" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
1 của nó. Ví dụ

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

Tùy chọn

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
1 được đánh dấu ở trên liên kết các kênh
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
23,
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
24 và
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
25 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
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
27 để gọi trực tiếp bất kỳ trình xử lý Monolog nào và trình điều khiển
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
28 để 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ì Laravel logging dựa trên thư viện Monolog nên chúng ta có thể truy cập bất kỳ trình xử lý nào của nó bằng trình điều khiển

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
27 như hình bên dưới

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

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
10 chỉ định trình xử lý Monolog mà chúng tôi sẽ sử dụng là
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
11 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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
12 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
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
10 thứ hai được sử dụng để chỉ định rằng
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
14 nên được sử dụng để ghi nhật ký các tin nhắn được gửi tới kênh
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
15 tới một tệp cục bộ

Tùy chọn

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
16 xác định một hoặc nhiều cấp độ nhật ký sẽ được ghi đến đích được xác định trong kênh. Trong trường hợp này, chỉ các mục cấp độ
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
17 sẽ được ghi vào tệp
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
18. 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

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

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

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
20 nơi chúng tôi có thể tạo kênh ghi nhật ký được tùy chỉnh hoàn toàn bằng Monolog

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

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

Bạn cần có thêm kiến ​​thức nâng cao liên quan đến Monolog để đạt được điều này, vì vậy nếu bạn quan tâm, hãy đọc hướng dẫn của chúng tôi về Monolog để tìm hiểu thêm

Hiểu các cấp độ nhật ký trong Laravel

Laravel cung cấp tám mức độ nghiêm trọng được xác định trong đặc tả RFC 5424. Danh sách dưới đây được sắp xếp theo mức độ nghiêm trọng của chúng, với

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
21 là nghiêm trọng nhất và
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
03 là ít nghiêm trọng nhất

  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    23. 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
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    24. tương tự như
    "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    23, nhưng ít nghiêm trọng hơn
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    26. 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
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    27. điều kiện lỗi trong ứng dụng của bạn
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    28. một cái gì đó bất thường đã xảy ra có thể cần phải được giải quyết sau
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    29. tương tự như
    "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    17 nhưng quan trọng hơn
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    17. thông báo thông tin mô tả hoạt động bình thường của chương trình
  • "channels" => [
        "deprecations" => [
            "driver" => "single",
            "path" => storage_path["logs/deprecation-warnings.log"],
        ],
    ]
    
    42. đượ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ề điều kiện nào nên được coi là ________ 724, ________ 726, ________ 728, 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 độ

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
17 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 độ
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
27

Đâ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
. . .
0

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

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

🔭 Bạn muốn tập trung và theo dõi nhật ký 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

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4 để tạo hệ thống ghi nhật ký cơ bản cho ứng dụng Laravel. Quay lại tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
9 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
. . .
2

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4 bằng trình điều khiển
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4. Nhớ lại rằng tùy chọn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
69 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 độ
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
42, nó sẽ không được ghi lại bởi bất kỳ kênh nào vì
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
42 ít nghiêm trọng hơn so với
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
17,
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
28 và
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
26. Tuy nhiên, nếu chúng tôi có một thông báo cấp độ
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
23, 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
. . .
09 sẽ chứa tất cả các bản ghi nhật ký ngoại trừ các thông báo gỡ lỗi. Tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
10 sẽ bao gồm tất cả các bản ghi mà bạn nên chú ý đến [
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
11 hoặc nghiêm trọng hơn] và tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
12 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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
11 đã thảo luận trước đó

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

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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
03 sẽ chỉ ghi lại các tin nhắn
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
42, kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
16 sẽ ghi lại các tin nhắn
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
29 và
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
28, và
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
21 sẽ đẩy các tin nhắn
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
24 và
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
23 lên kênh Telegram thông qua
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
22

Để thiết lập

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
22, 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
. . .
24. 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 mình

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
. . .
25] để tạo phiên bản mới của
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
22

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

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
23, nó chỉ nên đi qua kênh
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
21

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

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. Đi tới thư mục

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
29 và mở tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
30. 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ý
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4 từ phần trước

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

Tuyến đường. get["/", function [] { return view["welcome"]; }];

Tuyến đường. get["/user", function[] {

Nhật ký. info["Tuyến/người dùng đang được truy cập. "];

return "Đây là trang/người dùng. “;

Mặt tiền

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
32 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
. . .
33 được sử dụng để ghi thông báo mức
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
17. Để 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

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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
35; . 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
. . .
36. Bạn nên quan sát rằng có một tệp
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
37. Kiểm tra nội dung của tập tin này như sau

Vì thông báo nhật ký này có cấp độ nhật ký

"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
17, nó sẽ chỉ được ghi bởi kênh
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
39, 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
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
11 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

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

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

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
. . .
45 được hiển thị bên dưới

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
. . .
39 mà không cần thông qua kênh
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4. 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 một thông báo
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
17 vào
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
49, thông báo đó sẽ bị bỏ qua vì chỉ các nhật ký
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
29 và
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
28 được chấp nhận trên kê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

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

. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
41. 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
. . .
37 bằng lệnh bên dưới

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

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
. . .
54 và thêm tùy chọn
. . .
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
. . .
55 cho kênh
"channels" => [
    "deprecations" => [
        "driver" => "single",
        "path" => storage_path["logs/deprecation-warnings.log"],
    ],
]
4

Làm cách nào để bật nhật ký trong Laravel?

Laravel hỗ trợ các chế độ ghi nhật ký khác nhau như chế độ đơn, hàng ngày, nhật ký hệ thống và nhật ký lỗi. Bạn có thể đặt các chế độ này trong config/app. tệp php . Bạn có thể xem các mục nhật ký được tạo trong storage/logs/laravel.

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

Làm cách nào để tạo tệp nhật ký tùy chỉnh trong Laravel? .
cấu hình/ghi nhật ký. php. . 'kênh' => [.
Mã tuyến đường. Tuyến đường. get['create-custom-log', function [] { \Log. channel['itsolution']->info['Đây là thử nghiệm cho ItSolutionStuff. com. .
lưu trữ/nhật ký/giải pháp của nó. đăng nhập. đọc thêm. Ví dụ về tên chỉ mục tùy chỉnh của Laravel Migration

Làm cách nào để ghi vào tệp nhật ký trong Laravel?

Để ghi tệp nhật ký vào một vị trí khác, sử dụng phương thức useDailyFiles hoặc useFiles , sau đó nhập thông tin vào tệp nhật ký theo đường dẫn bạn vừa chỉ định. Like so: Log::useDailyFiles[storage_path[]. '/logs/name-of-log.

Làm cách nào để lưu trữ dữ liệu tệp nhật ký Laravel vào cơ sở dữ liệu?

Sử dụng trình điều khiển rất đơn giản. tạo kênh mới trong cấu hình/ghi nhật ký của bạn. tệp php và bạn đã sẵn sàng. Bây giờ bạn có thể thêm kênh vào trình điều khiển ngăn xếp hoặc đăng nhập rõ ràng vào cơ sở dữ liệu.

Chủ Đề