Как да настроя свойствата на log4j, така че всяка нишка да извежда в свой собствен лог файл?

Имам множество екземпляри на клас нишка, работещи във всеки даден момент. Имам настройка на log4j, която да се използва за нуждите на регистриране.

Имам нужда от начин да настроя log4j, така че всеки екземпляр на моя клас нишка да извежда своя журнал в различен лог файл.

Ето какво направих (в псевдо код)

public class doSomething extends Thread {

    private Logger d_logger;

    public doSomething(int id){
       d_logger = Logger.getLogger("doSomething"+id);
       String logFileName = "doSomething"+id+".log";

       Properties prop = new Properties;
       prop.setProperty("doSomething"+id,"DEBUG, WORKLOG");
       prop.setProperty("log4j.appender.WORKLOG","org.apache.log4j.FileAppender");
       prop.setProperty("log4j.appender.WORKLOG.File", logFileName);
       prop.setProperty("log4j.appender.WORKLOG.layout","org.apache.log4j.PatternLayout");
       prop.setProperty("log4j.appender.WORKLOG.layout.ConversionPattern","%d %c{1} - %m%n");
       prop.setProperty("log4j.appender.WORKLOG.Threshold","INFO"); 

       PropertyConfigurator.configure(prop);
    }

    public void run(){
       d_logger.info("Starting to doSomething number" + id);
    }

}

Въпреки че горното създава файл за всяка нишка, която инстанцирам, то не извежда нищо към тези файлове. Всяка помощ е много ценена.


person Rohan Grover    schedule 23.07.2009    source източник


Отговори (2)


Не извежда нищо към файловете, защото правилният синтаксис за настройка на регистратор е:

prop.setProperty("log4j.logger.doSomething"+id,"DEBUG, WORKLOG");
person matt b    schedule 23.07.2009
comment
Не работи с log4j2, класът PropertyConfigurator вече не се поддържа. - person Sanmoy; 10.10.2017

настройте файла си log4j.properties по следния начин: да предположим, че имате 2 нишки, наречени ThreadCheckEsportazioni и ThreadAllineaCodiciTrasportoBDN

# imposta a debug il livello del logger di root e lo chiama debug e debugFile
log4j.rootLogger=DEBUG

#logger debug
log4j.logger.it.consorziometis.sispc.exportbdn.job.ThreadAllineaCodiciTrasportoBDN=DEBUG, ThreadAllineaCodiciTrasportoBDN
log4j.logger.it.consorziometis.sispc.exportbdn.job.ThreadCheckEsportazioni=DEBUG, ThreadCheckEsportazioni

# Associa i tipi agli appendere
#log4j.appender.debug=org.apache.log4j.ConsoleAppender
log4j.appender.ThreadCheckEsportazioni=org.apache.log4j.RollingFileAppender
log4j.appender.ThreadAllineaCodiciTrasportoBDN=org.apache.log4j.RollingFileAppender

# Associa un PatternLayout al exportBdn.
log4j.appender.ThreadCheckEsportazioni.layout=org.apache.log4j.PatternLayout
log4j.appender.ThreadCheckEsportazioni.layout.ConversionPattern=[%d][%5p][%c]-> %m%n
log4j.appender.ThreadCheckEsportazioni.File=/apps/consorziometis/procedure_automatiche/ExportBDNService/logs/exportBDN.log
log4j.appender.ThreadCheckEsportazioni.MaxFileSize=10MB
log4j.appender.ThreadCheckEsportazioni.MaxBackupIndex=10
log4j.appender.ThreadCheckEsportazioni.append=true

# Associa un PatternLayout al allineaCodiciTrasporto.
log4j.appender.ThreadAllineaCodiciTrasportoBDN.layout=org.apache.log4j.PatternLayout
log4j.appender.ThreadAllineaCodiciTrasportoBDN.layout.ConversionPattern=[%d][%5p][%c]-> %m%n
log4j.appender.ThreadAllineaCodiciTrasportoBDN.File=/apps/consorziometis/procedure_automatiche/ExportBDNService/logs/allineaCodiciTrasporto.log
log4j.appender.ThreadAllineaCodiciTrasportoBDN.MaxFileSize=10MB
log4j.appender.ThreadAllineaCodiciTrasportoBDN.MaxBackupIndex=10
log4j.appender.ThreadAllineaCodiciTrasportoBDN.append=true

във всяка нишка трябва да зададете:

private static Logger log = Logger.getLogger(ThreadCheckEsportazioni.class);

за ThreadCheckEsportazioni и

private static Logger log = Logger.getLogger(ThreadAllineaCodiciTrasportoBDN.class);

за нишка ThreadAllineaCodiciTrasportoBDN

person Enrico    schedule 14.06.2018
comment
Може би бихте могли да напишете имената на класовете си на английски? - person TheRealChx101; 07.12.2018