import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import com.ztesoft.zsmart.core.configuation.ConfigurationMgr;
public class LoggerUtil {
public static Logger getLoggerByName(String name) {
//存在则返回现有
Logger logger = Logger.getLogger(name);
// 清空Appender。特別是不想使用現存实例时一定要初期化
logger.removeAllAppenders();
// 设定Logger级别。
logger.setLevel(Level.DEBUG);
// 默认为true。继承root輸出。
// 设置false后将不输出root。
logger.setAdditivity(true);
// 生成新的Appender
FileAppender appender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
// log的输出形式
String conversionPattern = "%m%n";
layout.setConversionPattern(conversionPattern);
appender.setLayout(layout);
// log输出路径: zsmart_home 忠配置的"uploadFileDirectory"路径下
String logPath = ConfigurationMgr.instance().getString("upload.uploadFileDirectory");
appender.setFile(logPath + "/log/" + name + ".txt");
// log的文字码
appender.setEncoding("UTF-8");
// true:在已存在log文件后面追加 false:新log覆盖以前的log
appender.setAppend(true);
// 使用当前配置
appender.activateOptions();
// 将新的Appender加到Logger中
logger.addAppender(appender);
return logger;
}
}
//测试代码
public class LoggerTest {
public static void main(String[]args) {
Logger logger = LoggerUtil.getLoggerByName("testLog");
logger.info("test log1");
}
}
附:Pattern参数的格式含义(上述代码中String conversionPattern)
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2013-8-19- 22:10:28
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
使用过程中出现过如下错误 Caused by: java.lang.VerifyError: method: getLoggerByName signature: (Ljava/lang/String;)Lorg/apache/log4j/Logger;) Incompatible object argument for function call.
找遍网上的文档,大致意思应该是jar包冲突。
所以如果遇到如上问题 可以改为用下面的方法
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.ztesoft.zsmart.core.exception.BaseAppException;
import com.ztesoft.zsmart.core.utils.ZSmartLogger;
import com.ztesoft.zsmart.mccm.base.mo.bll.BusiParamCache;
public class LoggerHelper {
public static void writeFailDodMsg(String name, String msg) throws BaseAppException {
String logAddress = "D:\tset";
String fileAddress = logAddress + File.separator + name + ".txt";
File file = new File(fileAddress);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
//true表示以追加形式写文件
FileWriter writer = new FileWriter(fileAddress, true);
writer.write(msg);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}