Я использую общий класс (LoggerUtils.java
) для регистрации сообщений в моем коде. Существует конструктор, который принимает класс как аргумент, и все остальные классы называют это для инициализации объекта регистрации. Я использую slf4j. Но моя проблема заключается в том, когда я просматриваю журнал, журнал отображает имя класса как LoggerUtils
во всех журналах. Мне нужно увидеть класс, из которого я вызвал класс LoggerUtils
для отображения моего журнала. Есть ли способ сделать это?Общий логгер в log4j
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
Любой код, который вы хотите поделиться? – Thomas
Моя проблема аналогична той, которая описана в этой ссылке http://stackoverflow.com/questions/21935367/log4j-class-name-showin-in-log-is-not-correct-when-i-call- the-logger-from-anoth Просто мне нужно напечатать имя метода и номер строки вместе с ним –
поделиться файлом log4j.properties. – rajuGT