Nó sẽ giống nhau nếu bạn khởi tạo logger theo cách phổ biến được đề xuất bởi các tài liệu, và sử dụng nó bên trong lớp X
:
Logger logger = Logger.getLogger(com.foo.X.class);
sau đó bạn sẽ nhận được tương tự cho %c
và %C
, vì tên trình ghi nhật ký (được xây dựng bởi "com.foo.X.class.getName()") sẽ khớp với tên lớp, trong đó tuyên bố khai báo được cấp.
Gọi logger của bạn "cái gì đó"
Logger logger = Logger.getLogger("something");
và bạn sẽ có "cái gì đó" cho %c
và tên lớp cho %C
.
Lưu ý rằng %C
được tính bằng log4j trong dấu vết ngăn xếp của chuỗi hiện tại, vì vậy nó mang tác động hiệu suất lớn, không giống như %c
, chỉ đơn giản là một Chuỗi. Bạn có thể tiến hành một thí nghiệm thú vị để xác nhận điều đó:
package com.foo;
class A {
private Logger = Logger.getLogger(B.class);
// ...
logger.log("inside A class");
}
Kết quả cho mô hình [%c][%m]
giả B
là trong gói com.foo
sẽ là:
[com.foo.B][inside A class]
Kết quả cho mô hình [%C][%m]
không phụ thuộc vào vị trí của B
sẽ là:
[com.foo.A][inside A class]