Java 使用log4j每次运行一个日志文件
如何将log4j.properties配置为每次运行应用程序都有一个日志文件。 我已经读到,您应该在文件名中使用时间戳,但随着时间的推移,每次运行都会创建许多文件 我尝试了DailyRollingFileAppender和RollingFileAppender,但找不到一种方法来为每次运行配置一个日志。不应将日志拆分为多个日志,也不应将其截断,并且应保留旧运行的文件 每个类都有一个静态org.slf4j.Logger作为其自己的类名:Java 使用log4j每次运行一个日志文件,java,logging,log4j,slf4j,appender,Java,Logging,Log4j,Slf4j,Appender,如何将log4j.properties配置为每次运行应用程序都有一个日志文件。 我已经读到,您应该在文件名中使用时间戳,但随着时间的推移,每次运行都会创建许多文件 我尝试了DailyRollingFileAppender和RollingFileAppender,但找不到一种方法来为每次运行配置一个日志。不应将日志拆分为多个日志,也不应将其截断,并且应保留旧运行的文件 每个类都有一个静态org.slf4j.Logger作为其自己的类名: private static final Logger lo
private static final Logger log = LoggerFactory.getLogger(Foo.class);
这是我当前的log4j属性
log4j.rootLogger=error, RootAppender, RootErrorAppender
#log4j.logger.com.example=info, qspaBackendAppender, stderr
log4j.logger.com.example=info, qspaBackendAppender
log4j.additivity.com.example=true
#log4j.logger.com.example.util=trace, qspaBackendAppender, stderr
#log4j.additivity.com.example.util=true
log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log
log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.qspaBackendAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Target=System.err
log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L - %m%n
log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender
log4j.appender.RootAppender.file=logs/root.log
log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RootAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender
log4j.appender.RootErrorAppender.file=logs/rootError.log
log4j.appender.RootErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RootErrorAppender.layout.ConversionPattern=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.RootErrorAppender.threshold=error
log4j.rootLogger=错误,RootAppender,RootErrorAppender
#log4j.logger.com.example=info,qspaBackendAppender,stderr
log4j.logger.com.example=info,qspaBackendAppender
log4j.additivity.com.example=true
#log4j.logger.com.example.util=trace,qspaBackendAppender,stderr
#log4j.additivity.com.example.util=true
log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log
log4j.appender.qspaBackendAppender.layout=org.apache.log4j.patternalyout
log4j.appender.qspaBackendAppender.layout.ConversionPattern=%-5p:%C{1}%C{2}:%m%n
log4j.appender.stderr=org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Target=System.err
log4j.appender.stderr.layout=org.apache.log4j.patternalyout
log4j.appender.stderr.layout.ConversionPattern=%-5p%c{1}:%L-%m%n
log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender
log4j.appender.RootAppender.file=logs/root.log
log4j.appender.RootAppender.layout=org.apache.log4j.patternalyout
log4j.appender.RootAppender.layout.ConversionPattern=%-5p:%C{1}%C{2}:%m%n
log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender
log4j.appender.RootErrorAppender.file=logs/rootError.log
log4j.appender.RootErrorAppender.layout=org.apache.log4j.patternalyout
log4j.appender.RootErrorAppender.layout.ConversionPattern=%-5p:%C{1}%C{2}:%m%n
log4j.appender.RootErrorAppender.threshold=错误
将的答案与此答案相结合,以获得所需的结果
我很难找到Udo Klimaschewski的答案Udy指的是什么,所以我把我的解决方案放在这里。 log4j.properties:
# Root logger option
log4j.rootLogger=INFO, fileout
# Direct log messages to file
log4j.appender.fileout=org.apache.log4j.FileAppender
log4j.appender.fileout.File=/logs/myapp_${current.date}.log
log4j.appender.fileout.ImmediateFlush=true
log4j.appender.fileout.Threshold=debug
log4j.appender.fileout.Append=false
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.conversionPattern=%5p | %d | %m%n
然后将该块放入主类:
public class Starter {
static{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hhmmss");
System.setProperty("current.date", dateFormat.format(new Date()));
}
要在应用程序启动时启动新日志文件,您可能需要使用OnStartupRiggeringPolicy XML配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
<Properties>
<Property name="log-path">C:/Logs/</Property>
</Properties>
<Appenders>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<RollingFile name="RollingFile" fileName="${log-path}/app.log"
filePattern="${log-path}/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<pattern>%d{dd/MM/yyyy HH:mm:ss} [%-5p/%t]: %C{1}(%L): %m%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
<OnStartupTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="100"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="root" level="debug" additivity="false">
<appender-ref ref="RollingFile" level="debug"/>
<appender-ref ref="console" level="debug"/>
</Logger>
<Root level="debug" additivity="false">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
C:/log/
%d{dd/MM/yyyy HH:MM:ss}[%-5p/%t]:%C{1}(%L):%m%n
使用filePattern属性对我很有效
${日期:yyyy-MM-dd-HH_-MM_-ss}
完美!这正是我想要的,而且比像这样的自定义FileAppender简单得多:但并发执行可能不安全,但这对我来说不是问题“Udo Klimaschewski的答案”->您只是链接到用户配置文件。我们不知道你指的是什么。虽然这个答案可能提供了解决方案,但对于新用户来说,找到你指的是什么是非常糟糕的体验。请复制答案中的重要代码,以便用户无需在多个链接之间导航。您窃取了Klimaschewski的答案:(@salaros:Sleet!!!如果你关注上一个链接,你看不到Klimaschewsky的任何答案!Tobia Zambon所做的是完全正确的。他甚至诚实地引用了他的作者。太棒了!定义系统属性的代码可以放在main()的开头已定义为静态的函数。属性不等于DOS环境变量。若要在日志文件名中使用用户名,必须在静态{}bloc或主函数中定义它。有趣的是,在Windows 7上,Tobia Zambon在文件名:-)中添加用户名,要添加的代码是`System.setProperty(“用户名”,System.getenv(“用户名”))“托比娅·赞本-_-