我已经在几个高流量网站上使用Log4Net几年了,我不能说我是一个快乐的客户.所以,想看看是否有其他人有同样的担忧:
RollingFileAppendor的CPU开销很大.我的一些网站每天需要跟踪5-10GB,当我启用日志记录时,CPU利用率会增加一倍以上.我想避免讨论为什么需要如此多的追踪.一些关键任务应用程序必须跟踪每个事务的每个步骤.
按日期滚动通常是不可靠的(它在白天记录正常,但随后会在午夜时分弄乱最后一天的日志文件).此行为不一致.我似乎不仅仅是网上的一些人抱怨这个,似乎没有人有一个好的解决方案.
最后但同样重要的是,我在过去三年中没有在Apache网站上看到任何新版本.因此,这开始看起来像一个废弃的开源项目,这通常意味着是时候转向一些替代框架了.
所以,我正在考虑放弃Log4Net,转而使用Microsoft Enterprise Library或其他东西.这里有人和我有同样的问题吗?
我使用log4j进行日志记录,使用属性文件进行配置.目前,我的日志文件太大(3.5 GB对于日志文件来说太大).所以我认为我需要使用RollingFileAppender - 但是当我这样做时,日志文件继续变得过大.我相信我错误配置了它; 有没有人有一个配置RollingFileAppender 的工作示例?
为了记录,我当前的配置如下所示:
log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log
log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender
log4j.appender.MAIN_LOG.layout=com.mycompany.util.log.Log4JSimpleLayout
log4j.appender.MAIN_LOG.DatePattern='.'yyyy-MM-dd
log4j.appender.MAIN_LOG.MaxFileSize=10MB
log4j.appender.MAIN_LOG.MaxBackupIndex=99
log4j.appender.MAIN_LOG.append=true
log4j.rootCategory=ALL, MAIN_LOG
Run Code Online (Sandbox Code Playgroud)
RollingFileAppender的替代方案也是一个很好的解决方案.
这是我的配置:
<appender name="myAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<file>mylogs.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>mylogs-%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} [%thread] - %M:%L - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
Run Code Online (Sandbox Code Playgroud)
根据此处找到的logback文档(http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy),文件将根据我的%d{yyyy-MM-dd_HH-mm}fileNamePattern 每分钟翻转一次.
我观察了它是如何工作的,这是我的发现:
我错过了什么,我以为它会每分钟创建一个日志文件?
我想创建可以在第二天开始时滚动的日志文件,或者如果达到指定的文件大小,日志文件必须包含在日期文件夹中.文件夹的格式是YYYYMMDD(/20111103/mylogfile.log)
是否可以通过Log4j执行此操作而不实现自定义类?
现在我正在使用log4j和log4j-extra,我设置log4j API中定义的FileNamePattern属性来每天滚动我的文件并将最大文件大小设置为50 MB.
我log4j.xml是:
<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="encoding" value="UTF-8" />
<param name="append" value="true" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" />
</rollingPolicy>
<triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
<param name="maxFileSize" value="50000000" />
</triggeringPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
上述设置的结果是日志文件未在下一天开始滚动,但如果文件大小达到50 MB,则将滚动日志文件.
请帮忙告诉我.m(_ _)m
我在log4net.config中有log4net的这个设置,允许多个线程写入同一个文件:
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<!-- Minimal locking to allow multiple threads to write to the same file -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="log\UI.log"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<maxSizeRollBackups value="30"/>
<datePattern value="-yyyyMMdd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/>
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但是在午夜之后,新创建的日志文件一直被覆盖,因此文件中只有最后一个事件.服务器重新启动后,它再次向右移动直到下一个午夜.
那么有人可以说这是配置问题还是这只是一个log4net问题?
语境:
我想使用log4j将审计相关的日志写入特定的日志文件,比方说audit.log.我不想使用syslogappender(基于udp),因为我不想容忍数据丢失.另外,当文件达到一定大小时,我使用logrotate来旋转audit.log.
问题:
我遇到的是,当logrotate将文件audit.log旋转到audit.log.1时,log4j继续写入audit.log.1而不是写入audit.log.
可能的方法:
我知道除了使用logrotate之外我可以使用rollingfileappender进行日志轮换,所以当scrollfileappender滚动文件时,它会毫无困难地切换到新文件.但我不能使用rollingfileappender的原因是我想使用logrotate的post旋转功能在旋转发生后触发一些脚本,而滚动文件无法提供.
我能想到的另一种绝望的方法是自己编写一个log4j自定义appender来关闭日志文件(audit.log.1)并在检测到文件被旋转时打开新文件(audit.log).
我从未使用ExternallyRolledFileAppender,但是如果可以使用logrotate post rotate将信号发送到ExternallyRolledFileAppender并使log4j知道文件被旋转,并开始写入新文件?
题:
只是想知道是否有一些像已经发明/写的那样的追加者?或者我还有其他选择来解决这个问题吗?
log4j logrotate rollingfileappender fileappender log-rotation
我们正在使用log4net滚动文件appender,并对我们的日志文件有以下要求:
我们遇到的问题是当文件达到500KB时的文件命名策略:它们被重命名为.1后缀.这是有问题的,因为它打破了Windows中的文件关联,因此打开文件(稍微)更多的是一件苦差事.
我们使用的配置是:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\log\path" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value=".yyyy-MM-dd.lo\g" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<maxSizeRollBackups value="50" />
<maximumFileSize value="500KB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
是否支持指定我们的文件命中时使用的命名策略maximumFileSize?
我想在我的java项目中使用Log4j,我应该在配置文件中提供这样的配置,每天晚上12点生成新文件,文件名应该生成 - 输出日志-MerProjectName-HostName-2013-Dec-10. txt 名称).我的配置文件是这样的 -
log4j.appender.FILE = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File = ${log}/log.out
log4j.appender.FILE.DatePattern = '.' yyyy-MM-dd-a
Run Code Online (Sandbox Code Playgroud)
它每天都在创建新文件,但它会在文件名后附加日期.请帮我.提前致谢.
我有一个Log4Net RollingFileAppender配置为:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
</root>
<logger name="RollingFileAppender" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender" />
</logger>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="C:\\MyLog.log" />
<param name="AppendToFile" value="true" />
<param name="DatePattern" value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
查看文档,默认滚动样式是Composite,因此当它达到特定大小(默认值为10MB)时,它将会滚动,而不仅仅是在日期.
问题是当它达到大小时,它正在重新启动日志并且我从前半天丢失数据(它在中午左右达到这个大小).
为什么这不会只是滚动到一个新文件,所有未来的日志行都被放入MyLog.log?或者是日志正在滚动,但是在午夜,它再次滚动并覆盖过时的日志(例如,一旦达到10MB,滚动到MyLog.log2009-04-08,然后在午夜覆盖同一个文件)?
我会设置
<rollingStyle value="Date" />
Run Code Online (Sandbox Code Playgroud)
这是我要做的就是确保它只在日期边界滚动吗?我可以在Log4Net.config中动态更改,还是必须重新启动应用程序?它在IIS6上运行.
嗨,我正在使用Log4j进行日志记录.以下是我的配置.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="FileAppender_Comp3" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy name="file" class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="log/Comp3_%d{dd-MM-yyyy HH-mm-ss}.log" />
</rollingPolicy>
<triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
<param name="MaxFileSize" value="3kb"/>
</triggeringPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p [%t] %c (%F:%L) - %m%n"/>
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但是当我运行文件时,它会抛出以下错误.
log4j:WARN Failed to set property [maxFileSize] to value "3kb".
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题.请帮我.
log4j ×5
log4net ×4
java ×3
logging ×3
fileappender ×1
log-rotation ×1
logback ×1
logrotate ×1
performance ×1