我正在使用org.apache.tools.ant.listener.Log4jListener来管理我的ant脚本的日志记录。 ant脚本是高度可配置的,并且设计为使用不同的参数以不同的方式运行,因此我需要能够记录到运行时指定的文件。我有一个log4j.properties,它指定一个日志文件为build.log,尽管我尝试启动log4j.properties中定义的ant重新定义属性但是没有成功。
构建忽略它们并继续写入build.log。我没有找到很多关于写入自定义文件的支持,除非它使用Logger类在Java中。
也许我认为这是错误的。 log4j.properties的处理方式与ant脚本中的属性文件不同(因此可以从命令行覆盖)?有没有办法可以在不编写自定义任务的情况下智能地执行此操作?
答案 0 :(得分:1)
使用可在命令行上动态定义的系统属性设置log4j.properties文件。以下属性为“$ {logfile.name}”。示例log4j配置如下:
# 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
在调用“ant”时传递属性的命令行选项是“-Dlogfile.name = {日志文件的运行时路径/文件名}”。用您的文件名替换{日志文件的运行时路径/文件名}。运行ant时,此值将设置为系统属性。然后在运行时将该系统属性替换为log4j.properties。