用于单独程序参数的 Java 单独日志文件

标签 java logging log4j fileappender

我有一个文件,它根据传递给它的命令行参数向不同的移动网络发送短信。 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 文件..这不符合我的要求。我需要在 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

请提出建议。

提前致谢。

最佳答案

您需要创建不同的附加程序才能实现目标。 尝试这个配置:

<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

关于用于单独程序参数的 Java 单独日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766681/

相关文章:

java - Android调试错误android.view.InflateException : Binary XML file line #9: Error inflating class fragment

go - 如何在 Go 中设置和访问 "global"记录器?

java - log4j 在 Netbeans 中使用不正确的属性文件

java - Tomcat 应用程序显示 "Unable to configure the logging system. No log.properties was found."

neo4j - 来自 Neo4j 服务器扩展的 Log4j 日志记录

java - 字符串类型的字符串方法未定义?

java - 使用自定义构造函数设置 BaseActivity 以从子类提供数据

java - freemarker可以用来输出自定义集合吗?

apache - 使用水槽将数据流传输到S3

python - 通过配置文件设置 python 记录器配置