Khai thác gỗ là quá trình ghi chép các hoạt động ứng dụng và nhà nước với một giao diện thứ cấp. - Dự án luật
Ý tưởng
Một ngày nọ, gọn gàng duy trì Reda Lemedan và tôi đã nói tất cả những điều Sass và tất cả những bất ngờ tôi nhìn thấy một mixin thú vị của mình :include -neat-cảnh báo ( "Cái gì là sai" );
Tôi hỏi anh ta những gì mixin này không, và ông nói với tôi nó về cơ bản là một wrapper cho warn chỉ thị từ Sass để kiểm tra có hay không người dùng sẵn sàng để in cảnh báo từ gọn gàng trong giao diện điều khiển (dựa trên một biến toàn cầu).
Vì vậy, tôi nghĩ đến bản thân mình tại sao dừng lại ở đó? và bắt đầu chơi với ý tưởng rằng cùng một đêm. Ý tưởng của tôi là xây dựng một wrapper cho cả warn và error ( từ Sass 3.4 ) để giúp thư viện và khuôn khổ phát triển in loại khác nhau của tin nhắn (thông tin, gỡ lỗi, cảnh báo, báo lỗi ...) và theo dõi tất cả các bản ghi.
Thực hiện hiện tại của tôi cung cấp:
5 mức độ đăng nhập ( DEBUG , INFO , WARN , LỖI và gây tử vong );
một mức độ tối thiểu mà các logger bắt đầu in ấn;
một lịch sử của tất cả các bản ghi, có thể được in như CSS;
một API thân thiện, dễ dàng sử dụng các chức năng;
một người trợ giúp để tìm hiểu thêm về mức độ khác nhau của khai thác gỗ.
Làm thế nào nó làm việc?
Hóa ra là khá đơn giản. Chúng ta cần một biến toàn cầu giữ toàn bộ cấu hình, và một mixin phục vụ như là một wrapper cho chỉ thị giao diện điều khiển in ấn của chúng tôi.Bởi vì chúng tôi muốn cấu hình toàn cầu của chúng tôi được tùy biến (một mức độ nào), chúng tôi quấn tuyên bố của mình trong một mixin. Đây không chỉ là thuận tiện hơn, nhưng nó cũng đẹp hơn cho người dùng cuối.
Vì vậy, thiết kế web ở Hải Phòng có một mixin, hãy gọi nó là logger chỉ là intented để được gọi là một lần, tạo ra một bản đồ toàn cầu giữ cấu hình của chúng tôi. Sau đó, chúng tôi có bao bọc của chúng tôi, đăng nhập , chấp nhận một mức độ khai thác gỗ (ví dụ WARN hoặc ERROR ) và thông tin đăng nhập như các đối số. Đó là khá nhiều đó.
Để làm cho mọi việc thuận tiện hơn cho các nhà phát triển, chúng tôi sẽ cung cấp một số chức năng tốc ký để đăng nhập cấp độ khác nhau. Ví dụ, thay vì phải gõ:
loginclude ( "ERROR" , "Không có đủ lân ở đây." );
... Chúng ta có thể có:
ERRORinclude ( "Không có đủ lân ở đây." );
Vì vậy, bạn sẽ kết thúc với một API như thế này:
// Khởi tạo một logger
// Bắt đầu bản ghi in tại `INFO` cấp .
// Điều này có nghĩa rằng các bản ghi `DEBUG` sẽ không được hiển thị.
loggerinclude ( "thông tin" );
Đăng nhập // điều.
ERRORinclude ( "Không có đủ lân ở đây." );
Chúng tôi cũng sẽ thêm một số mixins để mang lại một số tính năng bổ sung tuyệt vời:
một thông tin về in ấn mỗi cấp độ khai thác gỗ như một lời nhắc nhở;
một in ấn tất cả các bản ghi đã được đăng ký trong biên soạn hiện hành.
Xây dựng các API
Logger ConstructorHãy bắt đầu với đầu, thì chúng tôi? Logger xây dựng . Điều này sẽ chấp nhận một tham số duy nhất: mức độ mà tại đó các logger nên bắt đầu in các bản ghi trong giao diện điều khiển.
Điều này hoàn toàn là một mô hình phổ biến cho các hệ thống thiet ke web. Ví dụ:
Nếu bạn chỉ muốn in lỗi ( ERROR và gây tử vong ), bạn muốn viết loggerinclude ("LỖI") .
Nếu bạn muốn in tất cả mọi thứ, bạn có muốn đi với loggerinclude ("ALL") , mà về cơ bản là tương tự như mức độ khai thác gỗ thấp nhất ( DEBUG ).
Nếu bạn muốn vô hiệu hóa hoàn toàn logger, bạn chạy loggerinclude ("OFF") .
Lưu ý : bạn có thể tìm thêm thông tin về mức độ khai thác gỗ trong này đề StackOverflow hoặc trong Apache các bản ghi tài liệu .
loggermixin ($ minimum- cấp ) {
// Danh mục mức có sẵn
$ Cấp: "DEBUG" , "thông tin" , "WARN" , "LỖI" , "Fatal" ;
// Hãy chắc chắn rằng chuỗi cho trước là chữ hoa
$ Tối thiểu cấp: sang chữ hoa ($ minimum- cấp );
// Nếu mức là `all`, đi với thấp nhất mức độ của tất cả
if $ minimum- mức == "TẤT CẢ" {
$ Tối thiểu cấp: (mức $, thứ n 1 );
}
// Nếu mức độ là không hợp lệ, tùy ý đi với `INFO`
if không chỉ mục (mức $ "OFF" , $ minimum- cấp ) {
$ Tối thiểu cấp: "thông tin" ;
}
// Tạo biến toàn cầu
$ Logger cấu hình: (
// Danh mục mức có sẵn
"Cấp độ" : $ cấp,
// Danh sách các cấp được in với `@ error`
"Lỗi" : "Fatal" "LỖI" ,
// Tối thiểu cấp độ (như là một chỉ số của `$ levels`) để in
"Min" : chỉ số ($ cấp, $ minimum- cấp ),
// Hay không logger được kích hoạt
"Kích hoạt" : $ minimum- cấp ! = "OFF" ,
// Một bản đồ để theo dõi tất cả các bản ghi
"Lịch sử" : (
"DEBUG" : (),
"INFO" : (),
"WARN" : (),
"Lỗi" : (),
"Fatal" : ()
)
!) Toàn cầu;
}
Đoạn mã trên nên chủ yếu là tự giải thích, nhưng tôi đã thêm một số ý kiến để làm cho mọi thứ rõ ràng. Như bạn thấy, mixin này không làm được gì nhiều ngoại trừ tạo ra một biến toàn cầu. Không phải là xấu, phải không?
Trước khi tiếp tục, chúng ta hãy tạo ra một chức năng trợ giúp ít mà làm cho nó dễ dàng cho chúng tôi để có được một giá trị từ bản đồ toàn cầu này. Bởi vì bạn biết đấy, gõ bản đồ-get ($ logger-cấu hình, ...) không phải là điều khiển từ xa thú vị. Những gì về logger-conf (...) để thay thế?
1
2
3
function logger-conf ($ key) {
@ trả lại bản đồ nhận được ($ logger-cấu hình, $ key);
}
Đăng nhập Wrapper
Được rồi, chúng ta hãy chuyển sang thực tế ghi chức năng có khả năng in những thứ trong giao diện điều khiển. Không chỉ cần nó ra các thông điệp được đưa ra trong giao diện điều khiển của người dùng, nhưng nó cũng nên cập nhật lịch sử để theo dõi những gì đang được đăng (có thể hoặc có thể không có ích).Đó là âm thanh khó khăn. Cũng lo lắng không, nó sẽ được như mịn như bơ. Chúng ta đã biết mixin này nên chỉ chấp nhận hai tham số: mức độ khai thác gỗ, và tin nhắn.
mixin log ($ cấp , $ message) {
// Hãy chắc chắn rằng mức độ là chữ hoa
$ Mức: đến chữ hoa ($ cấp );
// Trừ khi đó là vô hiệu hóa, tiến hành
if logger-conf ( "kích hoạt" ) {
// Lấy hiện mức chỉ số 's
// Ví dụ, `DEBUG` sẽ là` 1 `
$ Index hiện tại cấp: chỉ số (logger-conf ( "độ" ), $ cấp );
// Nếu `$ mức `là không hợp lệ,
// Tùy ý rơi trở lại vào `INFO`
if không $ index-trị dòng mức {
$ Mức độ: "thông tin" ;
}
// Cập nhật lịch sử logger
include logger-update-lịch sử ($ cấp , $ message);
// Cuối cùng, in thông báo trong giao diện điều khiển
// Nếu hiện tại mức độ lớn hơn hoặc bằng mức tối thiểu mức độ .
if $ index-trị dòng cấp độ > = logger-conf ( "min" ) {
$ In: '[' + $ mức + '] ::' + $ tin;
// In nó như là `@ error` nếu nó là một lỗi cấp
if chỉ số (logger-conf ( "lỗi" ), $ cấp ) {
error $ in ;
}
// Khác sử dụng `@ warn`
else {
warn $ in ;
}
}
}
}
Bây giờ, chúng ta cần phải đối phó với việc cập nhật lịch sử. Đây thực sự là một chút khó khăn hơn, nhưng một khi bạn đã quen với các thao tác bản đồ, nó trở nên rõ ràng hơn.
Trước khi nhìn vào mã, hãy để tôi giải thích như thế nào là làm việc lịch sử. Về cơ bản, đó là một bản đồ nơi phím là mức khai thác gỗ, và giá trị là danh sách các thư lưu lại. Ví dụ, bạn có thể có một cái gì đó như:
$ _: (
"DEBUG" : (),
"INFO" : (),
"WARN" : (
"Bạn nên chú ý đến điều này." ,
"Điều này có thể được cải thiện."
),
"Lỗi" : (
"Một cái gì đó bị hỏng."
),
"Fatal" : ()
)
Được rồi. Chúng ta hãy đi.
mixin logger-update-lịch sử ($ cấp , $ message) {
// Lấy bản đồ lịch sử từ cấu hình
$ Lịch sử: logger-conf ( "lịch sử" );
// Lấy danh sách lịch sử cho hiện tại cấp độ
$ Hiện tại cấp-lịch sử: Bản đồ-get ($ lịch sử, $ cấp );
// Nối nhật ký tươi vào danh sách
$ Hiện tại cấp-lịch sử: append ($ hiện tại cấp-lịch sử, $ message);
// Tạo một biến tạm thời chứa các bản đồ lịch sử mới
$ Logger-lịch sử: bản đồ kết hợp ($ lịch sử, ($ mức: $ hiện tại cấp-lịch sử));
// Cập nhật bản đồ lịch sử từ cấu hình với các biến tạm thời của chúng tôi
$ Logger cấu hình: bản đồ kết hợp ($ logger-cấu hình, ( "lịch sử" : $ logger-lịch sử)) toàn cầu;
}
Nó liên quan đến một vài dòng không thân thiện, nhưng khi bạn giải thích từng dòng riêng biệt, tất cả ý nghĩa cuối cùng.
Chúng tôi đang thực hiện ở đây, nhưng chúng tôi đã nói về việc thêm chức năng viết tắt. Hãy làm điều đó bây giờ trước khi chúng ta quên mất:
mixin gây tử vong ($ message) {đăng nhậpinclude ( "gây tử vong" , $ message); }
ERRORmixin ($ message) {đăng nhậpinclude ( "LỖI" , $ message); }
mixin WARN ($ message) {đăng nhậpinclude ( "WARN" , $ message); }
mixin INFO ($ message) {đăng nhậpinclude ( "thông tin" , $ message); }
mixin DEBUG ($ message) {đăng nhậpinclude ( "DEBUG" , $ message); }
Đó là nó. Một điều cuối cùng chúng ta có thể làm, nhưng không thực sự bắt buộc, đang thử nghiệm liệu logger đã được bao gồm trước khi cố gắng sử dụng các bản đồ toàn cầu. Không chỉ làm chúng ta ngăn chặn những sai lầm ngu ngốc, nhưng chúng tôi cũng có thể làm cho instantiation logger tùy chọn bằng cách thực hiện nó trên bay.
mixin log ($ cấp , $ message) {
// Kiểm tra xem `biến toàn cầu logger-configuration` tồn tại.
// Nếu không, nó có nghĩa là `logger` đã không được bao gồm,
// Vì vậy chúng tôi bao gồm nó, tùy ý thiết lập min cấp để `INFO`.
if không toàn cầu-biến-tồn tại ( "logger cấu hình" ) {
loggerinclude ( "thông tin" );
}
if logger-conf ( "kích hoạt" ) {
// ...
}
}
Thêm Extras
Chúng tôi sẽ bắt đầu với lần đầu tiên (và hữu dụng nhất) của cả hai mixins thêm, người trợ giúp. Nó thực sự là một tiện ích vào thời điểm này vì tất cả nó có phải là in một quy tắc CSS với mức độ khai thác gỗ? Để chọn, và giải thích là giá trị.Đây là intented để cung cấp cho một số giúp đỡ để phát triển khi họ không thực sự biết được mức độ khai thác gỗ họ nên sử dụng. Nó có thể đã được viết như một bình luận nhưng tôi muốn thử điều này thingie máy in giúp đỡ.
mixin logger- giúp đỡ {
// Mở một `logger- mới giúp `chọn
logger- giúp đỡ {
OFF: "Vô hiệu hoá các logger." ;
Fatal: "lỗi nghiêm trọng gây ra chấm dứt sớm." ;
LỖI: "lỗi thời gian chạy khác hoặc điều kiện bất ngờ." ;
WARN: "Sử dụng các API phản đối, người nghèo sử dụng các API," gần như "lỗi"
+ "các tình huống khác mà không mong muốn hoặc không mong muốn, nhưng không nhất thiết phải sai chạy." ;
INFO: "Thú vị sự kiện thời gian chạy (khởi động / tắt máy)." ;
DEBUG: "Thông tin chi tiết về lưu lượng thông qua hệ thống." ;
}
}
Bạn sử dụng nó như thế này:
1
include logger- giúp đỡ ;
... Và biên dịch như sau:
logger- giúp đỡ {
OFF: "Vô hiệu hoá các logger." ;
Fatal: "lỗi nghiêm trọng gây ra chấm dứt sớm." ;
LỖI: "lỗi thời gian chạy khác hoặc điều kiện bất ngờ." ;
WARN: "Sử dụng các API phản đối, người nghèo sử dụng các API, 'gần như' lỗi, các tình huống khác mà không mong muốn hoặc không mong muốn, nhưng không nhất thiết phải sai chạy." ;
INFO: "Thú vị sự kiện thời gian chạy (khởi động / tắt máy)." ;
DEBUG: "Thông tin chi tiết về lưu lượng thông qua hệ thống." ;
}
Không có gì đặc biệt. Các mixin thêm khác là cách thú vị hơn. Nó sử dụng lịch sử để in tất cả các bản ghi đã được đăng ký trong quá trình biên dịch.
mixin logger-in các bản ghi {
// Mở một mới `chọn logger-logs`
logger bản ghi {
// Vòng trong lịch sử
each $ cấp , $ các bản ghi trong logger-conf ( "lịch sử" ) {
// Kiểm tra xem hiện khai thác gỗ mức từ vòng lặp
// Sẽ được hiển thị hay không dựa trên mức tối thiểu mức độ
// Và độ dài của giá trị của nó (không đăng nhập, không in ).
if chỉ số (logger-conf ( "độ" ), $ cấp )> = logger-conf ( "min" ) và chiều dài ($ log)> 0 {
// Vòng qua các bản ghi đăng ký và in chúng.
each $ đăng nhập vào bản ghi $ {
# $ { mức }: $ đăng nhập;
}
}
}
}
}
Một lần nữa, sử dụng đơn giản:
include logger-in các bản ghi;
... Đó sẽ ra (dựa trên ví dụ trước đó của chúng tôi):
logger bản ghi {
WARN: "Bạn nên chú ý đến điều này." ;
WARN: "Điều này có thể được cải thiện." ;
LỖI: "Một cái gì đó bị hỏng" ;
}
Ví dụ
// Khởi một logger mới với `INFO` là tối thiểu cấp để đăng nhập.// Nếu không có, nó sẽ tự động được thực hiện trên đăng nhập đầu tiên.
loggerinclude ( "thông tin" );
// Logger giúp đỡ (tùy chọn, rõ ràng)
include logger- giúp đỡ ;
Đăng nhập // thứ
INFOinclude ( "Này, nhìn vào đó." );
INFOinclude ( "Mang trong kỳ lân!" );
include WARN ( "Dude, chú ý." );
// Điều này không được in nhưng vẫn theo dõi trong các bản ghi.
DEBUGinclude ( "Debug và các công cụ." );
// Lịch sử đầu ra (tùy chọn) đặc biệt hữu ích để gỡ lỗi
include logger-in các bản ghi;
Xem thêm: sitemap la gi?
Kết luận
Như bạn thấy, mã này là khá nhẹ cuối cùng, cộng với số lượng lớn nhất của nó là ý kiến. Tôi nghĩ rằng nó cung cấp một API sạch đẹp giúp theo dõi những gì đang được đăng nhập vào bất kỳ dự án nào.Đây là công cụ nhằm mục đích thư viện và khuôn khổ phát triển. Nếu bạn tình cờ được một, xin vui lòng cho một thử này nếu bạn nghĩ nó có thể là hữu ích, và đưa cho tôi thông tin phản hồi của bạn.
Bài viết khác: thiet ke web tphcm
Đăng nhận xét