- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 log4j 的新手。在我们的应用程序中,我们需要以这样的方式实现日志记录,即所有不同级别都将转到不同的文件。所以我通过谷歌搜索扩展了 RollingFileAppender,如下所示。
import java.io.File;
import java.io.IOException;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.MDC;
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
public class LogLevelFilterFileAppender extends RollingFileAppender {
private final static String DOT = ".";
private final static String HIPHEN = "-";
private static final String ORIG_LOG_FILE_NAME = "OrginalLogFileName";
public LogLevelFilterFileAppender() {
}
/*public LogLevelFilterFileAppender(Layout layout, String fileName,
boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
super(layout, fileName, append, bufferedIO, bufferSize);
}
*/
public LogLevelFilterFileAppender(Layout layout, String fileName,
boolean append) throws IOException {
super(layout, fileName, append);
}
public LogLevelFilterFileAppender(Layout layout, String fileName)
throws IOException {
super(layout, fileName);
}
@Override
public void activateOptions() {
MDC.put(ORIG_LOG_FILE_NAME, fileName);
super.activateOptions();
}
@Override
public void append(LoggingEvent event) {
try {
setFile(appendLevelToFileName((String) MDC.get(ORIG_LOG_FILE_NAME),
event.getLevel().toString()), fileAppend, bufferedIO,
bufferSize);
} catch (IOException ie) {
errorHandler
.error(
"Error occured while setting file for the log level "
+ event.getLevel(), ie,
ErrorCode.FILE_OPEN_FAILURE);
}
super.append(event);
}
private String appendLevelToFileName(String oldLogFileName, String level) {
if (oldLogFileName != null) {
final File logFile = new File(oldLogFileName);
String newFileName = "";
final String fn = logFile.getName();
final int dotIndex = fn.indexOf(DOT);
if (dotIndex != -1) {
// the file name has an extension. so, insert the level
// between the file name and the extension
/*newFileName = fn.substring(0, dotIndex) + HIPHEN + level + DOT
+ fn.substring(dotIndex + 1);*/
newFileName= level+".log";
} else {
// the file name has no extension. So, just append the level
// at the end.
newFileName = fn + HIPHEN + level;
}
return logFile.getParent() + File.separator + newFileName;
}
return null;
}
}
我的log4j.properties是这样的:
logDir=/opt/ems/release/logs
log4j.logger.A= SECURITY#SecurityLevel,A1,A31
log4j.additivity.A=false
log4j.appender.A1 = LogLevelFilterFileAppender
log4j.appender.A1.MaxBackupIndex=20
log4j.appender.A1.append=true
log4j.appender.A1.layout.ConversionPattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.File = /home/krishna/Desktop/logs1.log
log4j.appender.A1.maxFileSize=5MB
log4j.category=SecurityLevel
log4j.logger.B= PRF#PRFLevel,A2,A31
log4j.additivity.B=false
log4j.appender.A2 = LogLevelFilterFileAppender
log4j.appender.A2.MaxBackupIndex=20
log4j.appender.A2.append=true
log4j.appender.A2.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A2.layout = org.apache.log4j.PatternLayout
log4j.appender.A2.File = /home/krishna/Desktop/logs1.log
log4j.appender.A2.maxFileSize=5MB
log4j.category=PRFLevel
log4j.logger.C= VRB#VRBLevel,A3,A31
log4j.additivity.C=false
log4j.appender.A3 = LogLevelFilterFileAppender
log4j.appender.A3.MaxBackupIndex=20
log4j.appender.A3.append=true
log4j.appender.A3.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A3.layout = org.apache.log4j.PatternLayout
log4j.appender.A3.File = /home/krishna/Desktop/logs1.log
log4j.appender.A3.maxFileSize=5MB
log4j.category=VRBLevel
log4j.appender.A31 = org.apache.log4j.ConsoleAppender
log4j.appender.A31.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A31.layout = org.apache.log4j.PatternLayout
log4j.logger.D = INFO,A4,A31
log4j.additivity.D=false
log4j.appender.A4 = LogLevelFilterFileAppender
log4j.appender.A4.MaxBackupIndex=20
log4j.appender.A4.append=true
log4j.appender.A4.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A4.layout = org.apache.log4j.PatternLayout
log4j.appender.A4.File = /home/krishna/Desktop/logs1.log
log4j.appender.A4.maxFileSize=5MB
log4j.category=INFO
log4j.logger.E= WARN, A5,A31
log4j.additivity.E=false
log4j.appender.A5 = LogLevelFilterFileAppender
log4j.appender.A5.MaxBackupIndex=20
log4j.appender.A5.append=true
log4j.appender.A5.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A5.layout = org.apache.log4j.PatternLayout
log4j.appender.A5.File = /home/krishna/Desktop/logs1.log
log4j.appender.A5.maxFileSize=5MB
log4j.category= WARN
log4j.logger.F= ERROR,A6,A31
log4j.additivity.F=false
log4j.appender.A6 = LogLevelFilterFileAppender
log4j.appender.A6.MaxBackupIndex=20
log4j.appender.A6.append=true
log4j.appender.A6.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A6.layout = org.apache.log4j.PatternLayout
log4j.appender.A6.File = /home/krishna/Desktop/logs1.log
log4j.appender.A6.maxFileSize=10KB
log4j.category= ERROR
log4j.logger.G= DEBUG,A7,A31
log4j.additivity.F=false
log4j.appender.A7 = LogLevelFilterFileAppender
log4j.appender.A7.MaxBackupIndex=20
log4j.appender.A7.append=true
log4j.appender.A7.layout.ConversionPattern =%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.appender.A7.layout = org.apache.log4j.PatternLayout
log4j.appender.A7.File = /home/krishna/Desktop/logs1.log
log4j.appender.A7.maxFileSize=5MB
log4j.category= DEBUG
现在的问题是滚动没有发生,我不知道该怎么做。我知道我们需要重写翻转方法,但是我们需要在其中做什么。我还需要添加 subappend 方法吗?请帮忙。 提前致谢。
最佳答案
您可以为每个级别使用不同的附加程序,而不是扩展RollingFileAdapter
,这可以通过配置来实现。
以下示例适用于 log4j 1.2。debug
消息将转到文件 debug.log
,而 info
消息将转到 info.log
。
<appender name="debugAppender" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="Append" value="true"/>
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="./Archive/debug.%d{yyyy-MM-dd}.log.zip" />
<param name="ActiveFileName" value="./debug.log" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="TRACE"/>
<param name="LevelMax" value="DEBUG"/>
<param name="AcceptOnMatch" value="true"/>
</filter>
</appender>
<appender name="infoLogAppender" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="Append" value="true"/>
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="./Archive/info.%d{yyyy-MM-dd}.log.zip" />
<param name="ActiveFileName" value="./info.log" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C (line:%L) - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO"/>
<param name="AcceptOnMatch" value="true"/>
</filter>
</appender>
PS:我知道这是一个老问题,但我希望它对某人有所帮助。
关于java - 在 RollingFileAppender 的情况下在 log4j 中滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17313237/
有人能说出这些东西有什么不同吗?此外,我无法理解,如果 DailyRollingFileAppender 存在,为什么需要使用 TimeBasedRollingPolicy ? 最佳答案 org.ap
我有一个在单个服务器上运行的 WCF 服务,使用 Log4net 通过 INFO 和 WARN 级别的日志条目跟踪使用情况。使用具有以下非常标准配置的 RollingFileAppender:
典型的 logback appender 配置是 FILEPATH.log FILEPATH.%d{yyyy-MM-dd-HH}.log 24
使用配置: 我可以获得名为“Mylog20120529.log”的历史日志。 我想知道我是否可以获得名为“20120529.log”的日志。 感谢大家 最佳答案 在这里应用一个技巧,它将完成工作。
使用系统属性变量创建 RollingFileAppender 时出现以下错误。 ERROR Unable to invoke factory method in class class org.apa
我的 tomcat Web 应用程序有以下 log4j.xml 文件:
我正在使用 Log4Net 登录我编写的应用程序。为了写入日志文件,我使用了具有 5 个备份和最大文件大小为 250KB 的 RollingFileAppender。 我想做的是让用户有机会在发生崩溃
是否有任何流行的 Java 日志记录框架支持滚动文件附加器,我可以将其配置为每天滚动,并删除任何超过一定天数的日志文件?我知道我可以使用滚动文件附加程序和 cron,但想知道是否有人知道可以同时执行这
是否可以将 log4net 配置为每小时滚动文件?如果没有 - 有关如何使用所需功能覆盖 RollingFileAppender 以制作 HourlyRollingFileAppender 的任何提示
我正在使用RollingFileAppender和SizerollingStyle。默认情况下,它会创建带有编号扩展名的备份文件,这让我抓狂。是否可以更改它,使其始终使用定义的扩展名(例如 .txt
我们在开发和生产计算机上发现一个间歇性问题,即我们的日志文件未记录到。 当使用 Visual Studio 进行开发和调试时,我们在 VS 输出窗口中收到以下 log4net 错误消息: log4ne
使用 Log4j2 库版本 2.9.1。 我正在尝试以编程方式创建RollingFileAppender: RollingFileAppender appender = RollingFileAppe
当前版本的 Log4net 是否有办法创建具有复合滚动样式的 RollingFileAppender,其中滚动文件始终保留给定的扩展名(在我的情况下为 .log)? 我想要的格式示例: MyLog.l
我在 Web 项目中使用 log4net (v1.2.9.0)。一切正常,但几周后 RollingFileAppender 停止滚动。取而代之的是,每条日志消息都附加到同一个文件,因此现在这个文件已经
我正在以编程方式在 log4net 中配置 RollingFileAppender。我目前有这样的东西: RollingFileAppender fa = new RollingFileAppende
我有一个滚动文件附加器,它每天晚上滚动文件。但是,当它滚动时,新文件只有一个日志条目。似乎文件不再附加日志条目。如果我重新启动服务,它会正确记录。 这是我的设置:
我怎样才能创建一个 RollingFileAppender在接受谨慎标志的 Logback 中,还允许我指定日志文件的位置? 我尝试了以下操作,但正如我从文档中了解到的,logback 不支持 fil
虽然我已经阅读了有关此问题的多个其他问题和答案,但我没有找到答案,希望得到任何帮助。 public static void rerouteAppenderToFile(File file, Logge
您好,我现在使用 log4net 有一段时间了。这是我的记录器: public static class LoggerSetup { private static RollingFileApp
我有两个上下文在同一个 JVM 和 Tomcat 实例中运行,我想使用 logback RollingFileAppender 写入同一个日志文件。如果我使用相同的文件,logback Rolling
我是一名优秀的程序员,十分优秀!