Java Отдельный файл журнала для отдельных аргументов программы

У меня есть один файл, который отправляет SMS в разные мобильные сети в соответствии с переданными ему аргументами командной строки. Vodafone, сеть 3, T-Mobile, O2 и т. д. Итак, когда аргумент принят

$Run SMSDaemon 3Network  // sends sms to 3 networks's mobile users
$Run SMSDaemon Vodafone  // sends sms to Vodafone  mobile users
$Run SMSDaemon TMobile  // sends sms to TMobile  mobile users
$Run SMSDaemon O2    // sends sms to O2 mobile users

Теперь я хочу создать отдельные файлы журнала для отдельной сети, чтобы я мог иметь информацию журнала, отладочное сообщение отдельно в соответствии с мобильными сетями.

Поскольку у меня есть только один файл SMSDaemon, я пробовал следующее, но он ничего не записывает в файл. Это только запись в файл, который был определен в файле log4j.properties. Итак, я запутался, что писать в log4j.properties и что писать в этом java-файле??

public static void main(String[] args) {
if( args.length != 1  {  return;}
networkUnique = args[0];
setLogProps(networkUnique);
//other codes and in setLogProps method 

private static void setLogProps(String networkUnique)
{
log = Logger.getLogger(networkUnique);
Properties logprops=new Properties();
logprops.setProperty("log4j.appender.file","org.apache.log4j.FileAppender");
logprops.setProperty("log4j.appender.file.maxFileSize","300MB");
logprops.setProperty("log4j.appender.file.maxBackupIndex","100");
logprops.setProperty("log4j.appender.file.File","/etc/sms/"+networkUnique+".log");
logprops.setProperty("log4j.appender.file.threshold","debug");
logprops.setProperty("log4j.appender.file.layout","org.apache.log4j.PatternLayout");
logprops.setProperty("log4j.appender.file.layout.ConversionPattern","%d [%t] %-5p  [%-35F : %-25M : %-6L] %-C -%m%n"); 
logprops.setProperty("log4j.appender.stdout","org.apache.log4j.FileAppender"); 
PropertyConfigurator.configure(logprops); 
log.info("Log message Starting for "+ networkUnique);
}

В файле log4j.properties написано следующее. Все журналы записываются в файл network.log, который определен в этих свойствах... что не соответствует моему требованию. Мне нужен отдельный журнал для отдельной сети, которая определена в методе setLogProps SMSDaemon.

# Define the root logger with appender file
#log = /etc/sms/
log4j.rootLogger = info, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
#log4j.appender.FILE.File=${log}/network.log

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Пожалуйста, предложите.

Заранее спасибо.


person Madan Madan    schedule 07.10.2012    source источник


Ответы (2)


Вам нужно создавать различные приложения для достижения цели. Попробуйте эти конфигурации:

<appender name="3Network" class="org.apache.log4j.FileAppender">
    <param name="file" value="logs/3Network.log" />
    <param name="append" value="true" />        
</appender> 
<appender name="Vodafone" class="org.apache.log4j.FileAppender">
    <param name="file" value="logs/Vodafone.log" />
    <param name="append" value="true" />        
</appender> 
<appender name="TMobile" class="org.apache.log4j.FileAppender">
    <param name="file" value="logs/TMobile.log" />
    <param name="append" value="true" />        
</appender> 

То же самое вы можете написать как:

log4j.appender.TMobile=org.apache.log4j.FileAppender
log4j.appender.TMobile.File=logs/TMobile.log.. 

и так далее..

Надеюсь, это поможет вам решить вашу проблему. Также см. это - ссылка < /а>

person Ved    schedule 07.10.2012
comment
Извините, не помогло! попробовал с log4j.appender.TMobile , Любое другое предложение!! - person Madan Madan; 07.10.2012
comment
Это дало мне ошибку. Не удалось найти приложения для регистратора TMobile ... есть идеи, как это произошло? - person Madan Madan; 07.10.2012
comment
У меня есть файл log4j.properties. Когда я пробовал с TMobile и 3 Networks. Информация записывалась в оба файла, как информация о 3-х сетях записывалась в TMobile.log, и наоборот. log4j.appender.3network=org.apache.log4j.FileAppender log4j.appender.3networks.File=${log}/3network.log log4j.appender.3networks.layout=org.apache.log4j.PatternLayout log4j.appender.3networks. layout.ConversionPattern=%d [%t] %-5p [%-35F : %-25M : %-6L] %-C -%m%n То же самое для других сетей. Но теперь лог пишется на всех них. - person Madan Madan; 07.10.2012
comment
тогда необходимо обновить логику класса ведения журнала, чтобы каждый отдельный журнал выгружался в отдельный файл. - person Ved; 07.10.2012
comment
У меня есть следующее в частном статическом журнале журнала SMSDaemon = Logger.getLogger(networkUnique); NetworkUnique — это уникальный идентификатор для 3 сетей, TMobile, O2 и т. д. - person Madan Madan; 07.10.2012

Я бы посоветовал создать разные классы Logger на основе вашей сети, например.

     class com.netwrok.Network1Logger{
          public void logMessage(String className, String message, String Level);
     }

     class com.netwrok.Network2Logger{
          public void logMessage(String className, String message, String Level);
     }

Затем обновите log4j.properties, как показано ниже:

    # Root logger option
    log4j.rootLogger=INFO, RootFileAppender

    #Network1 Logger option
    log4j.logger.com.netwrok.Network1Logger=INFO,Network1FileAppender

    #Network2 Logger option
    log4j.logger.com.netwrok.Network2Logger=INFO,Network2FileAppender


    # RootFileAppender - used to log messages in the root.log file.
    log4j.appender.RootFileAppender=org.apache.log4j.FileAppender
    log4j.appender.RootFileAppender.File=root.log
    log4j.appender.RootFileAppender.MaxFileSize=100MB
    log4j.appender.RootFileAppender.layout=org.apache.log4j.PatternLayout
    log4j.appender.RootFileAppender.layout.ConversionPattern= %5p [%t] (%F:%L) - %m%n


    # Network1FileAppender- used to log messages in the shunted.log file.
    log4j.appender.Network1FileAppender=org.apache.log4j.FileAppender
    log4j.appender.Network1FileAppender.File=shunted.log
    log4j.appender.Network1FileAppender.MaxFileSize=10MB
    log4j.appender.Network1FileAppender.layout=org.apache.log4j.PatternLayout
    log4j.appender.Network1FileAppender.layout.ConversionPattern= %5p [%t] (%F:%L) - %m%n

    # Network2FileAppender- used to log messages in the shunted.log file.
    log4j.appender.Network2FileAppender=org.apache.log4j.FileAppender
    log4j.appender.Network2FileAppender.File=shunted.log
    log4j.appender.Network2FileAppender.MaxFileSize=10MB
    log4j.appender.Network2FileAppender.layout=org.apache.log4j.PatternLayout
    log4j.appender.Network2FileAppender.layout.ConversionPattern= %5p [%t] (%F:%L) - %m%n

Если вы не хотите, root logger, отключите его.

person Yogendra Singh    schedule 07.10.2012
comment
Существует много сетей, и может быть условие введения новых сетей, поэтому я думаю, что это не поможет, так как мне приходится каждый раз создавать новый класс. Любая другая идея? - person Madan Madan; 07.10.2012