log4j 中的通用记录器
Generic logger in log4j
我正在使用通用 class(LoggerUtils.java
) 在我的代码中记录消息。有一个构造函数接受 Class 作为参数,所有其他 classes 调用它来初始化记录器对象。我正在使用 slf4j。但我的问题是当我查看日志时,日志在所有日志中显示 class 名称为 LoggerUtils
。我需要从调用 LoggerUtils
class 的位置查看 class 以显示我的日志。有什么办法吗?
Log4j.properties:
log4j.appender.SampleLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SampleLog.File=/sample.log
log4j.appender.SampleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.SampleLog.layout.ConversionPattern=%d{ISO8601} (%c: %M %L) - %m%n
log4j.category.com.sample=DEBUG, SampleLog
LoggerUtils.java
package com.sample.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerUtils {
private Logger logger;
private LoggerUtils(Class clazz) {
try {
logger = LoggerFactory.getLogger(clazz);
} catch (Exception e) {
System.out.println("Error in logger");
}
}
public static LoggerUtils getLogger(Class clazz) {
return new LoggerUtils(clazz);
}
public void info(Object message) {
logger.info(message.toString());
}
}
My Sample Class:
package test;
import com.sample.utils.LoggerUtils;
public class Sample{
LoggerUtils logger = LoggerUtils.getLogger(this.getClass());
public void print(){
logger.info("Hello");
}
}
在日志中,我得到:
2015-09-25 16:19:21,784 (test.Sample: info 27) - Hello
我期待这样的事情:
2015-09-25 16:19:21,784 (test.Sample: print 8) - Hello
要获取调用实用程序 class 的方法和行,请获取当前堆栈跟踪并向上移动,直到离开实用程序 class 调用的代码:
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for( StackTraceElement element : stackTrace ) {
//ignore all entries from within LoggerUtils
if( element.getClassName().equalsIgnoreCase( LoggerUtils.class.getName() ) ) {
continue;
} else {
String method = element.getMethodName();
int lineNo = element.getLineNumber();
break;
}
}
我正在使用通用 class(LoggerUtils.java
) 在我的代码中记录消息。有一个构造函数接受 Class 作为参数,所有其他 classes 调用它来初始化记录器对象。我正在使用 slf4j。但我的问题是当我查看日志时,日志在所有日志中显示 class 名称为 LoggerUtils
。我需要从调用 LoggerUtils
class 的位置查看 class 以显示我的日志。有什么办法吗?
Log4j.properties:
log4j.appender.SampleLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SampleLog.File=/sample.log
log4j.appender.SampleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.SampleLog.layout.ConversionPattern=%d{ISO8601} (%c: %M %L) - %m%n
log4j.category.com.sample=DEBUG, SampleLog
LoggerUtils.java
package com.sample.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerUtils {
private Logger logger;
private LoggerUtils(Class clazz) {
try {
logger = LoggerFactory.getLogger(clazz);
} catch (Exception e) {
System.out.println("Error in logger");
}
}
public static LoggerUtils getLogger(Class clazz) {
return new LoggerUtils(clazz);
}
public void info(Object message) {
logger.info(message.toString());
}
}
My Sample Class:
package test;
import com.sample.utils.LoggerUtils;
public class Sample{
LoggerUtils logger = LoggerUtils.getLogger(this.getClass());
public void print(){
logger.info("Hello");
}
}
在日志中,我得到:
2015-09-25 16:19:21,784 (test.Sample: info 27) - Hello
我期待这样的事情:
2015-09-25 16:19:21,784 (test.Sample: print 8) - Hello
要获取调用实用程序 class 的方法和行,请获取当前堆栈跟踪并向上移动,直到离开实用程序 class 调用的代码:
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for( StackTraceElement element : stackTrace ) {
//ignore all entries from within LoggerUtils
if( element.getClassName().equalsIgnoreCase( LoggerUtils.class.getName() ) ) {
continue;
} else {
String method = element.getMethodName();
int lineNo = element.getLineNumber();
break;
}
}