TimeBasedRollingPolicy我正在从Log4J Extras设置一个,但我不清楚什么告诉政策何时滚动。 API并不明确,所以我只是做出推断。听起来它是FileNamePattern决定频率的最后一个元素。
以log4j Wiki中的示例为例:
<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
<!-- The active file to log to -->
<param name="file" value="/applogs/myportal/portal.log" />
<param name="append" value="true" />
<param name="encoding" value="UTF-8" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<!-- The file to roll to, this is a fairly intelligent parameter, if the file
ends in .gz, it gzips it, based on the date stamp it rolls at that time,
default is yyyy-MM-dd, (rolls at midnight)
-->
<param name="FileNamePattern" value="/applogs/myportal/portal.%d.log.gz" />
</rollingPolicy> …Run Code Online (Sandbox Code Playgroud) 我在tomcat服务器日志中收到此错误"log4j:ERROR无法重命名".我的log4j XML中有多个DailyRollingFileAppender.每个appender指向不同的文件.只有一个应用程序实例正在运行.我使用了Handle实用程序并运行命令(以日志文件名作为参数)
处理-f ams-app.log,结果是Tomcat7.exe pid:5032类型:文件54C:E:\ apps\ams\logs\ams-app.log
从这里我假设文件只有一个锁.我的环境Windows Server 2008,tomcat 7.0和Java 6以及slf4j-log4j12(1.5.6)
当在AIX服务器上托管相同的应用程序时,不会发生此问题.我搜索了这个问题,似乎是windows specfic.此外,我并不热衷于使用DatedFileAppenders或任何分叉的log4j.logback是否解决了这些问题.任何关于如何解决这个问题的建议表示赞赏.谢谢
这里是我的log4j xml
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CONSOLE_APPENDER" class="org.apache.log4j.ConsoleAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="Target" value="System.out"/>
<param name="Threshold" value="DEBUG"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%n %d{yyyy/MM/dd HH:mm:ss} %-5p %x %M(%F:%L) - %m %n"/>
</layout>
</appender>
<appender name="APP_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="datePattern" value="yyyy-MM-dd"/>
<param name="file" value="E:/apps/ams/logs/ams-app.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%n %d{yyyy/MM/dd HH:mm:ss} %-5p %x %M(%F:%L) - %m %n"/>
</layout>
</appender>
<appender name="SQL_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
<param name="datePattern" value="yyyy-MM-dd"/> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用log4j2来创建我正在开发的系统的日志文件,我已经按照他们网站上的说明进行操作,并且在运行时没有发生错误,但是日志没有保存在我设置的地方(例如" d:\日志\ app.log").
这是我的log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<RollingFile name="MyRollingFile" fileName="D:/logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</appenders>
<loggers>
<logger name="Log_RollingFile" level="TRACE" additivity="false">
<appender-ref ref="MyRollingFile"/>
</logger>
<root level="ERROR">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我试过了 :
[编辑:]
我在类路径上也有这些库
我在RollingFile配置或库(可能)上遗漏了什么?
提前致谢.
这是我的 log4net.xml 文件
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\MVC2-" > </file>
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy'-'MM'-'dd'.log'" />
<dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%utcdate %level %property{requestId} %thread %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
日志日期采用 UTC,但文件会在服务器时间滚动到第二天。这会导致几个小时的日志记录在错误的文件中。
如何根据 UTC 时间使文件翻转?
是否有我可以使用的附加程序可以让我每天滚动,压缩和最大文件?
使用apache-log4j-extras此配置,我可以通过压缩获取每日滚动文件:
<appender name="debugFileRolling" class="org.apache.log4j.rolling.RollingFileAppender">
<!-- The active file to log to -->
<param name="file" value="debug.log" />
<param name="append" value="true" />
<param name="encoding" value="UTF-8" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="/%d{yyyy-MM-dd}-debug.log.gz" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t] %c: %m%n" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但我不能指定MaxBackupIndex为 in org.apache.log4j.RollingFileAppender(注意两者之间的轻微命名空间差异)。
我想要两者而不必实现我自己的FileAppender, TriggeringPolicy, 或RollingPolicy。
我的目标是每当文件mylog.log滚动到mylog.log.1这个滚动文件时也会移动到另一个目录,所以在原始目录中总是只有mylog.log. 这可以使用RollingFileAppender吗?还是来自默认log4j库的另一个附加程序?
我正在尝试使用 log4j2(2.0.2) 和 10 个日志文件在 tomcat 7.0.23 中配置 RollingFile appender。
我在 filePattern 中使用 ${sys:catalina.base},它不起作用,日志文件放在 tomcat/bin/${sys:catalina.base}/ 目录中。
有趣的部分是第一个日志文件(没有数字)在 tomcat/logs 下创建正常 - 这意味着它成功地将文件名属性映射到真实路径。
当我用 filePattern="C:/apache-tomcat-7.0.23/logs/app.%i.log" 替换 ${sys:catalina.base} 时,它可以工作。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %-5p [%X{REQ_ID}] [%c{1}] %m%n"/>
</Console>
<RollingFile name="FILE" fileName="${sys:catalina.base}/logs/app.log"
filePattern="${sys:catalina.base}/logs/app.%i.log">
<PatternLayout pattern="%d %-5p [%X{REQ_ID}] [%c{1}] %m%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
这意味着 filePattern 没有正确解释。
如何在不必静态指定日志目录的情况下克服这个问题?
谢谢您的帮助
我正在使用 log4j 2.0.2 进行日志记录。我试图将 ContextMapLookup 使用到 RollingFileAppender 的 fileName 和 filePattern 属性中,但我无法使其工作。
这是我在 REST 外观中的(简化的)Map 初始化:
@GET
public Response logSomething(@QueryParam("param") String param) {
ThreadContext.put("someName", "default");
LOGGER.info("Param from query: {}", param);
ThreadContext.clearMap();
return Response.ok().build();
}
Run Code Online (Sandbox Code Playgroud)
这是我的(简化的)配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n" />
</Console>
<RollingFile name="Rolling"
fileName="logs/${ctx:someName}-webapps-metrics.log"
filePattern="logs/archives/${ctx:someName}-webapps-metrics-%i.log" >
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %m%n"/>
<SizeBasedTriggeringPolicy size="5 KB"/>
</RollingFile>
</Appenders>
<Loggers>
<!-- My Logger using rollingFile -->
<Logger name="com.ipanematech.rest.MyRESTFacade" level="info" additivity="false">
<AppenderRef ref="Rolling" /> …Run Code Online (Sandbox Code Playgroud) 我想使用 Logback 将“ch.qos.logback”类记录到日志文件中,但它仅记录在控制台中而不是记录在文件中。
是否可以?
我需要它来调查 logback 的一些问题。
这是我的日志配置文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration scan="true" scanPeriod="60 seconds">
<property name="base-path" value="../../xpto/sysX/logs"/>
<property name="application-name" value="app_X"/>
<appender class="ch.qos.logback.core.ConsoleAppender" name="CONSOLE">
<param name="Threshold" value="INFO"/>
<encoder>
<pattern>%d{dd/MM/yyyy HH:mm:ss.SSS} %-5level %logger{30} - %msg%n</pattern>
</encoder>
</appender>
<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE_LOGBACK">
<param name="Threshold" value="DEBUG"/>
<file>${base-path}/mylog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${base-path}/%d{yyyy-MM-dd_HH}/mylog.%i.log</fileNamePattern>
<maxHistory>72</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%.30thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender class="ch.qos.logback.classic.AsyncAppender" name="FILE_LOGBACK_ASYNC">
<param name="Threshold" value="DEBUG"/>
<appender-ref ref="FILE_LOGBACK"/>
<queueSize>1000</queueSize>
<discardingThreshold>0</discardingThreshold>
</appender>
<logger additivity="false" level="DEBUG" name="ch.qos.logback">
<appender-ref ref="FILE_LOGBACK"/>
</logger> …Run Code Online (Sandbox Code Playgroud) 我默认安装了 tomcat 9.0.37。服务器日志中的 catalina.out 文件不会每天滚动,因此其大小已增长到几 GB。
但是,我观察到名称模式为catalina.yyyy-mm-dd.log 的文件不断生成,但不包含当天的完整日志。
我已经按照一些博客中的建议尝试了以下方法,但都是徒劳的。
创建一个名为tomcat的文件并将以下代码粘贴到其中。
/home/tomcat/servers/tomcat/logs/catalina.out {
daily
rotate 30
missingok
dateext
compress
notifempty
copytruncate
size 20M
}
Run Code Online (Sandbox Code Playgroud)
改变了
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
Run Code Online (Sandbox Code Playgroud)
到
.handlers = 1catalina.org.apache.juli.FileHandler
Run Code Online (Sandbox Code Playgroud)
在conf/logging.properties文件中。
谁能建议我如何从 catalina.out 推出每日日志?