2012-10-07 3 views
1

전달 된 명령 줄 인수에 따라 다른 모바일 네트워크에 SMS를 보내는 단일 파일이 있습니다. 보다 폰, 3 네트워크, T 모바일, O2는 .. 그래서, 아규먼트가 나는 정보를 기록 할 수 있도록 별도의 네트워크에 대한 별도의 로그 파일을 만들려면 지금 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 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

그것은 나에게 오류를 주었다. 로거 TMobile에 대한 어떤 appender도 발견되지 않았다 ... 어떤 아이디어? –

+0

메시지는 log4j.properties 파일을 찾을 수 없음을 나타냅니다. 오히려 콘솔 appender를 시도하고 작동하면 log4j.xml 또는 log4j.properties를 수정하십시오. 이것은 도움이 될 수 있습니다 - http://www.coderanch.com/t/63230/open-source/log-log-WARN-No-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

많은 네트워크가 있으며 새 네트워크가 도입 될 수 있으므로 새로운 네트워크를 만들 때마다 도움이되지 않을 것입니다. 다른 생각? –

관련 문제