【发布时间】:2009-08-24 18:49:59
【问题描述】:
谁能指导我如何配置 log4j 以登录到我在运行时指定的特定文件。日志文件的名称和路径是在运行时生成的,应用程序必须登录到该文件特定文件。
log4j.properties 文件中的文件附加程序条目通常指向应用程序将使用的日志文件。但是在这种情况下,我想从命令行读取日志文件路径并记录到该特定文件。
我怎样才能做到这一点?
【问题讨论】:
谁能指导我如何配置 log4j 以登录到我在运行时指定的特定文件。日志文件的名称和路径是在运行时生成的,应用程序必须登录到该文件特定文件。
log4j.properties 文件中的文件附加程序条目通常指向应用程序将使用的日志文件。但是在这种情况下,我想从命令行读取日志文件路径并记录到该特定文件。
我怎样才能做到这一点?
【问题讨论】:
您也可以从 log4j.properties 文件中执行此操作。使用下面的示例文件,我添加了系统属性 ${logfile.name}:
# logfile is set to be a RollingFileAppender
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${logfile.name}
log4j.appender.logfile.MaxFileSize=10MB
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%-5p]%d{yyyyMMdd@HH\:mm\:ss,SSS}\:%c - %m%n
然后可以通过两种不同的方式设置日志文件名:
在 java 程序中直接设置系统属性(在调用 log4j 之前)。
System.setProperty("logfile.name","some path/logfile name string");
【讨论】:
-Dlogfile.name={logfile}" 正是我要找的
${sys:logfile.name}
改编自 log4j 文档:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class SimpandFile {
static Logger logger = Logger.getLogger(SimpandFile.class);
public static void main(String args[]) {
// setting up a FileAppender dynamically...
SimpleLayout layout = new SimpleLayout();
FileAppender appender = new FileAppender(layout,"your filename",false);
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}
【讨论】:
也可以通过 log4j.properties 文件中定义的这个属性来完成
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.maxFileSize=5000KB
log4j.appender.logfile.maxBackupIndex=5
log4j.appender.logfile.File=/WebSphere/AppServer/profiles/Custom01/error.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %C %M %c{1}:%L - %m%n
【讨论】:
工作和相同已经过测试
// setting up a FileAppender dynamically...
SimpleLayout layout = new SimpleLayout();
RollingFileAppender appender = new RollingFileAppender(layout,"file-name_with_location",true);
appender.setMaxFileSize("20MB");
logger.addAppender(appender);
【讨论】:
只需删除您的 log4j 代码并在您的 java 类中替换此代码即可运行良好,无需添加属性或 xml 文件
SimpleDateFormat dateFormatsd = new SimpleDateFormat("dd-MM-yyyy-hh-mm");
String dateandtime=dateFormatsd.format(new Date());
SimpleLayout layout = new SimpleLayout();
RollingFileAppender appender = new RollingFileAppender(layout,".\\Logs\\log "+dateandtime+".txt",true);
appender.setMaxFileSize("20MB");
logger.addAppender(appender);
上面的代码会记录每分钟的日志。
谢谢
【讨论】: