50,530
社区成员
发帖
与我相关
我的任务
分享
package com.test.common.core.log;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import com.test.common.core.appl.system.AppSystemContext;
/**
* RollingFileAppender 继承Log4j的滚动日志输出地,以当前工作路径为当前目录。<p>
*
*
*
*/
public class AppRollingFileAppender extends org.apache.log4j.RollingFileAppender {
/**
* 构造方法
*/
public AppRollingFileAppender() {
super();
//默认编码格式设定为UTF-8
setEncoding("UTF-8");
}
// 最大允许的Level
private Level maxLevel;
/**
* 取得最大允许的Level
*
* @return 最大允许的Level
*/
public Level getMaxLevel() {
return maxLevel;
}
/**
* {@inheritDoc}
*/
@Override
public synchronized void doAppend(LoggingEvent event) {
if (!LoggerInfoHelper.isLessOrEqual(maxLevel, event.getLevel())) {
return;
}
if (new File(fileName).exists() == false) {
try {
super.setFile(fileName, fileAppend, bufferedIO, bufferSize);
} catch (IOException ignore) {
}
}
super.doAppend(event);
}
/**
* 重写setFile方法
*
* @param fileName 相对于当前应用的相对路径
*/
@Override
public synchronized void setFile(final String fileName, boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
String fileNameMerge = getLogFilePath(fileName);
File parent = new File(fileNameMerge).getParentFile();
if ((parent != null) && (!parent.exists())) {
if (!parent.mkdir()) {
throw new IOException("Parent dir can not create!");
}
}
super.setFile(fileNameMerge, append, bufferedIO, bufferSize);
}
//增加当前应用路径
protected static String getLogFilePath(final String fileName) {
if (fileName == null) {
return null;
}
if (new File(fileName).isAbsolute()) {
return fileName;
}
String home = AppSystemContext.getInstance().getAppHome();
if (home == null || home.length() == 0) {
home = LoggerFactoryPlugin.getLoggerHome();
}
return new File(home, fileName).getAbsolutePath();
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null">
<!-- 同步 -->
<appender class="com.test.common.core.log.AppRollingFileAppender" name="ROLLING_FILE">
<param name="Encoding" value="UTF-8"/>
<param name="File" value="logs/trace.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="50"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%C:%L] %m%n"/>
</layout>
</appender>
<!-- 异步 -->
<appender name="ROLLING_FILE_ASYN" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="8192"/>
<param name="LocationInfo" value="true"/>
<appender-ref ref="ROLLING_FILE"/>
</appender>
<!-- 标准输出 -->
<appender class="org.apache.log4j.ConsoleAppender" name="STDOUT">
<param name="threshold" value="debug" />
<param name="target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="debug" />
<param name="LevelMax" value="info" />
</filter>
</appender>
<!-- 标准错误 -->
<appender class="org.apache.log4j.ConsoleAppender" name="STDERR">
<param name="threshold" value="warn" />
<param name="target" value="System.err"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" />
</layout>
</appender>
<appender class="com.test.common.core.log.AppRollingFileAppender" name="ROLLING_FILE_BS">
<param name="Threshold" value="DEBUG"/>
<param name="Encoding" value="UTF-8"/>
<param name="File" value="logs/taskjob.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="200"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%p][%C:%L] %m%n"/>
</layout>
</appender>
<!--
<appender name="ROLLING_FILE_BS_SYN" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="8192"/>
<param name="LocationInfo" value="true"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</appender>
<logger additivity="false" name="com.ygkj.qd.common">
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</logger>
<logger additivity="false" name="com.ygkj.qd.common">
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</logger>
-->
<logger additivity="false" name="com.test.cdt.biz.desktop.job.CheckOverrideTrans">
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE_BS"/>
</logger>
<!-- root logger -->
<root>
<level value="DEBUG"/>
<appender-ref ref="ROLLING_FILE"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="STDERR"/>
</root>
</log4j:configuration>