我正在使用C#System.Diagnostics.TextWriterTraceListener来打印跟踪.但跟踪文件变得太大(数百MB).我想改变行为TextWriterTraceListener,如果跟踪文件变大,它会将输出写入另一个文件.例如,原始跟踪文件是'output1.txt',如果它大于100MB,则TextWriterTraceListener应写入'output2.txt'.
你遇到过类似的问题吗?有没有优雅的解决方案?
我需要的功能是在配置的日志文件的开头写一个标题行.此外,日志文件应该根据时间模式滚动(我说的是logback 1.0.7).
所以,我正在考虑编写一个Appender - 虽然我不确定它是不是我真正需要的自定义布局.
1)Appender
根据logback的文档,正确的方法是扩展AppenderSkeleton,但那么我将如何将其与RollingFileAppender(以使文件翻转?)相结合?
另一方面,如果我扩展RollingFileAppender,我会覆盖哪种方法来装饰现有的功能?我怎么告诉它只在文件的开头写这个特定的字符串?
2)布局
类似地,该方法似乎正在扩展LayoutBase,并提供实现doLayout(ILoggingEvent event).但同样,我不知道如何装饰行为 - 只是在文件中添加一个新行,而不是破坏其功能(因为我仍然希望其余日志正确显示).
将getFileHeader()在LayoutBase看起来很有希望,但我要如何使用它?是否打算被自定义布局覆盖?(可能是的,因为它是Layout界面的一部分,但那又怎么样?)
谢谢!
我使用RollingFileAppender的log4j 1.2.16,其推出的日志文件,当他们达到一定规模.现在我想每天滚动日志文件,当它们达到一定大小时.因此,每天将有一个或多个日志文件.
例如,
myapp.log myapp-17.12.2013.log myapp-16.12.2012.log myapp-16.12.2012.1.log myapp-16.12.2012.2.log
是否有一个现成的appender,它已经做到了吗?
我想要的是:
因此,logs文件夹永远不会增长(50MB*10)= 500MB.
但似乎我的log4j2配置没有正确完成.
发生的事情是:
这是配置:
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="log/my.log" filePattern="log/my-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我的问题是关于log4j 中的LoggerAppenderRollingFile。由于项目中的一些更改,我必须升级到 log4j2,我的问题是“ MaxFileSize”和“ MaxBackupIndex”的等效网络属性是什么。log4j.xml 的该部分如下所示:
<appender name="profilingAppender" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="C:\\logs\\test.log"/>
<param name="MaxFileSize" value="20000KB"/>
<param name="MaxBackupIndex" value="5"/>
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - [%X{USER}] - %m%n" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
亲切的问候
我正在尝试使用log4j2从使用FileAppender切换到RollingFileAppender(与beta3和beta4 jar一起发生).
我把它配置为:
<RollingFile name="RollingFile" fileName="${logdir}/${filename}"
filePattern="${logdir}/app-%d{yyyy-MM-dd-hh-mm-ss}_%i.log" >
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
...
<loggers>
<root level="ERROR">
<appender-ref ref="RollingFile"/>
<appender-ref ref="STDOUT"/>
</root>
...
Run Code Online (Sandbox Code Playgroud)
在代码中,我试图以这种方式获取记录器:
Logger logger = LogManager.getLogger(this.getClass());
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时我得到了这个异常:
2013-02-01 17:56:54,773 ERROR Unable to invoke method createAppender in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(BaseConfiguration.java:723)
at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:489)
at org.apache.logging.log4j.core.config.BaseConfiguration.createConfiguration(BaseConfiguration.java:481)
at org.apache.logging.log4j.core.config.BaseConfiguration.doConfigure(BaseConfiguration.java:162)
at org.apache.logging.log4j.core.config.BaseConfiguration.start(BaseConfiguration.java:120)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:271)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:287)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:139) … 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配置或库(可能)上遗漏了什么?
提前致谢.
有人能说出这件事之间有什么不同吗?而且,我无法理解,如果DailyRollingFileAppender存在,为什么需要使用TimeBasedRollingPolicy?