2012-06-20 39 views
9

Để ghi lỗi cho một lớp nhất định, tôi đang truy cập tên lớp như vậy: Đây có phải là cách 'trả tiền' tốt cho tên lớp dưới dạng Chuỗi không, vì vậy nó có thể được sử dụng để ghi nhật ký ?Lấy tên lớp để ghi nhật ký

private static final String CLASS_NAME = MyClass.class.getName(); 
logger.error("Error occurred in "+CLASS_NAME); 

Trả lời

4

Bạn có thể thiết lập tham số ghi nhật ký trong chính log4j.xml.

Đối với exp -

<appender name="swcd-web" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="Threshold" value="DEBUG"/> 
    <param name="Append" value="true"/> 
    <param name="File" value="${catalina.home}/logs/swcd-web.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
    </layout> 
</appender> 

Nó sẽ đăng nhập ngoại lệ như thế này trong tập tin swcd-web.log -

2012-05-23 16:34:51,632 [main] ERROR com.idc.sage.sso.dynamo.SsoDbStorage - cannot get configuration for max SSO age 
+0

Câu hỏi đặt ra không phải là về log4j. –

1

tôi sẽ làm điều đó theo cách này:

logger.error("Error occured in " + this.getClass().getName()); 

Sẽ dễ dàng hơn nếu có điều gì đó thay đổi, nhưng có một cách khác để làm điều này.

+1

this.getClass(). GetName() sẽ cung cấp tên lớp hoàn chỉnh (bao gồm cả các gói). Tôi sẽ cắt ngắn và chỉ sử dụng tên lớp. – 18bytes

+1

Bạn có thể sử dụng this.getClass(). GetSimpleName() nếu bạn thích – raven1981

4

Nếu bạn khởi tạo logger theo cách này:

private static Logger logger = Logger.getLogger(MyClass.class.getName())> 

sau đó tên của lớp sẽ có mặt trong tất cả các sự kiện đăng nhập, bạn không cần phải đặt một cách rõ ràng trong mọi cuộc gọi đăng nhập:

logger.error("Error occured while doing this and that"); 

các bạn có thể cấu hình các dịch vụ khai thác gỗ (trong logging.properties trong trường hợp java.util.logging, hoặc log4j.properties nếu bạn sử dụng Apache log4j) bao gồm tên lớp trong mọi thông điệp tường trình.

1

Vì bạn không cho biết bạn đang sử dụng thư viện ghi nhật ký nào, tôi khuyên bạn nên sử dụng slf4j. Tôi nghĩ rằng đó là cách dễ nhất mà bạn có thể nhận được. Bạn chỉ cần yêu cầu đối tượng Logger từ số LoggerFactory của slf4j như sau:

private static final Logger LOGGER = LoggerFactory.getLogger(YouerClass.class); 

bây giờ bạn có thể sử dụng đối tượng LOGGER để ghi nhật ký.

Logging lỗi ví dụ như sau:

LOGGER.error(yourMessage, throwable); 

Bạn có thể gửi một thông điệp chuỗi đơn giản hoặc toàn bộ ngoại lệ.

7

Java 8 Giải pháp

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import java.lang.invoke.MethodHandles; 
... 

private final static Logger LOG = 
        LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); 
+0

Tôi nhận được lỗi: Phương thức getLogger (Lớp ) Là không xác định đối với loại LoggerFactory –

+0

rất lạ, bạn đang sử dụng Java 8 và logback? – MariuszS

+0

không sử dụng logback, nhờ –

Các vấn đề liên quan