######################## 系统运行日志配置文件 ########################
##系统开发时可设为DEBUG级别 log4j.logger.com.huawei=DEBUG
##系统发布时请设为INFO级别 log4j.logger.com.huawei=INFO
log_home=./logs
#Log4j默认记录器 级别分为 FATAL、ERROR、WARN、INFO、DEBUG /SYSTEM日志记录方式可分为 SYSTEM和CONSOLE 其中SYSTEM表示日志记录到文件 CONSOLE表示打印到控制台
log4j.rootLogger=INFO,SYSTEM
#运行日志记录器 日志级别可分为 FATAL、ERROR、WARN、INFO、DEBUG 修改此处必须重新启动服务
#log4j.addivity.org.apache=true
#打印到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[FMCP] %d{yy-MM-dd HH:mm:ss,SSS} %c %-5p %x - %m%n
#打印到文件,每天产生一个新的文件
log4j.appender.SYSTEM=org.apache.log4j.DailyRollingFileAppender
log4j.appender.SYSTEM.File=/WEB-INF/logs/run/run.log
log4j.appender.SYSTEM.DatePattern=yyyy-MM-dd'.log'
log4j.appender.SYSTEM.Append=true
log4j.appender.SYSTEM.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSTEM.layout.ConversionPattern=[FMCP] %d [%t] %c %-5p %x %m%n
#log4j.appender.SYSTEM.layout.ConversionPattern=[PORTAL] %d [%t] %-5p %c %x %m%n
log4j.logger.MONITOR=INFO,MONITOR
log4j.additivity.MONITOR=false
log4j.appender.MONITOR=com.njhh.fmcp.log.FMCPRollingFileAppender
log4j.appender.MONITOR.File=${webapp.root}/WEB-INF/logs/monitor/monitor.log
log4j.appender.MONITOR.Append=true
log4j.appender.MONITOR.layout=org.apache.log4j.PatternLayout
log4j.appender.MONITOR.layout.ConversionPattern=[FMCP] %d [%t] %c %-5p %x %m%n
log4j.appender.MONITOR.MaxBackupIndex=30
log4j.appender.MONITOR.MaxFileSize=10MB
1:log4j.appender.MONITOR.Append=true 日志打印,设置为false不打印
2:log4j.additivity.MONITOR=false 打印到log4j.appender.MONITOR.File对应的文件中,默认为true,打印到log4j.rootLogger对应的SYSTEM指向的log4j.appender.SYSTEM.File对应的文件中
3:如果要控制日志文件的个数、生成文件名,需要重写FileAppender
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.helpers.CountingQuietWriter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
import org.apache.log4j.spi.LoggingEvent;
/**
* 日志文件
* @author
*
*/
public class FMCPRollingFileAppender extends FileAppender {
private long maxFileSize = 10485760L;
private int maxBackupIndex = 1;
private long nextRollover = 0L;
public FMCPRollingFileAppender(Layout layout, String filename, boolean append)
throws IOException {
super(layout, filename, append);
}
public FMCPRollingFileAppender(Layout layout, String filename)
throws IOException {
super(layout, filename);
}
public FMCPRollingFileAppender() {
}
public void rollOver() {
if (this.qw != null) {
long size = ((CountingQuietWriter) this.qw).getCount();
System.out.println("rolling over count=" + size);
this.nextRollover = (size + this.maxFileSize);
}
System.out.println("maxBackupIndex=" + this.maxBackupIndex);
boolean renameSucceeded = true;
if (this.maxBackupIndex > 0) {
File file = null;
String currUtcTime = getyyyyMMddHHmmssLog();
String currfileName = this.fileName.substring(0, this.fileName
.indexOf(".log"));
File target = new File(currfileName + "_" + currUtcTime + ".log");
super.closeFile();
file = new File(this.fileName);
System.out.println("Renaming file " + file + " to " + target);
renameSucceeded = file.renameTo(target);
if (!renameSucceeded) {
try {
setFile(this.fileName, true, this.bufferedIO,
this.bufferSize);
} catch (IOException e) {
LogLog.error("setFile(" + this.fileName
+ ", true) call failed.", e);
}
}
List fileNamelist = getFileNameList(this.fileName);
if (fileNamelist.size() > this.maxBackupIndex) {
String overtimeFilename = null;
int i = 0;
for (; i < fileNamelist.size() - this.maxBackupIndex + 1; i++) {
overtimeFilename = (String) fileNamelist.get(i);
file = new File(overtimeFilename);
if (!file.exists())
continue;
renameSucceeded = file.delete();
}
}
}
try {
setFile(this.fileName, false, this.bufferedIO, this.bufferSize);
this.nextRollover = 0L;
} catch (IOException e) {
System.out.println("setFile(" + this.fileName + ", false) call failed.");
}
}
public synchronized void setFile(String fileName, boolean append,
boolean bufferedIO, int bufferSize) throws IOException {
super.setFile(fileName, append, this.bufferedIO, this.bufferSize);
if (append) {
File file = new File(fileName);
((CountingQuietWriter) this.qw).setCount(file.length());
}
}
public void setMaxBackupIndex(int maxBackups) {
this.maxBackupIndex = maxBackups;
}
public void setMaximumFileSize(long curmaxFileSize) {
this.maxFileSize = curmaxFileSize;
}
public void setMaxFileSize(String value) {
this.maxFileSize = OptionConverter.toFileSize(value,
this.maxFileSize + 1L);
}
public void setQWForFiles(Writer writer) {
this.qw = new CountingQuietWriter(writer, this.errorHandler);
}
public void subAppend(LoggingEvent event) {
super.subAppend(event);
if ((null != this.fileName) && (null != this.qw)) {
long size = ((CountingQuietWriter) this.qw).getCount();
if ((size >= this.maxFileSize) && (size >= this.nextRollover)) {
rollOver();
}
}
}
public static String getyyyyMMddHHmmssLog() {
SimpleDateFormat uTCyyyyMMddHHmmssLog = new SimpleDateFormat(
"yyyyMMddHHmmss");
return uTCyyyyMMddHHmmssLog.format(new Date());
}
protected List<String> getFileNameList(String filename) {
List fileNameList = new ArrayList();
String filePath = filename.substring(0, filename.lastIndexOf("/"));
String currfileName = filename.substring(filename.lastIndexOf("/") + 1);
currfileName = currfileName.substring(0, currfileName.indexOf(".log"));
File file = new File(filePath);
if (file.isDirectory()) {
File[] files = file.listFiles();
File temp = null;
for (int i = 0; i < files.length; i++) {
temp = files[i];
if (!temp.getName().contains(currfileName))
continue;
fileNameList.add(filePath + "/" + temp.getName());
}
}
Collections.sort(fileNameList);
if (null != fileNameList) {
if (!fileNameList.isEmpty()) {
fileNameList.remove(fileNameList.size() - 1);
}
}
return fileNameList;
}
}