2012-10-07 59 views
1

我有一個文件,它根據傳遞給它的命令行參數將SMS發送到不同的移動網絡。沃達豐,3網絡,T-Mobile公司,O2等..所以,當arguement傳遞Java單獨的日誌文件單獨的程序參數

$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文件中,這個文件是在這個屬性中定義的,這不符合我的要求。我需要在SMSDaemon setLogProps方法中定義單獨的網絡日誌。

# 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 

請建議。

在此先感謝。

回答

1

您需要創建不同的appender才能實現目標。 試試這個配置:

<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.. 

等..

希望這將有助於你得到你的問題解決了。 也看到這個 - reference

+0

對不起,它沒有幫助!嘗試與log4j.appender.TMobile,任何其他建議! –

+0

它給了我錯誤沒有appender可以找到記錄器TMobile ...任何想法它是如何來的? –

+0

該消息表示未找到log4j.properties文件。您嘗試使用控制檯appender,如果它有效,請嘗試更正log4j.xml或log4j.properties。這可能有所幫助 - http://www.coderanch.com/t/63230/open-source/log-log-WARN-N-appenders – Ved

1

我會建議根據您的網絡創建不同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 

如果你不想要,根記錄器,關閉它。

+0

有許多網絡,可能有新網絡的引入條件,所以我認爲這不會幫助,因爲我必須每次創建新類。任何其他想法? –