有时候用log4j或者slf4j,logback等框架直接使用不生效
决定写一个实现log4j日志工具类,写入日志到指定文件
完整代码如下
package com.esoon.zk20s.docgen.utils;
import com.esoon.zk20s.docgen.constants.LogConstants;
import com.mentor.chs.plugin.IXApplicationContext;
import com.mentor.chs.plugin.IXOutputWindow;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import java.io.*;
import java.util.Properties;
public class ChsLogger {
private static IXOutputWindow out = null;
private Logger logger = null;
public static void initLogger(IXApplicationContext context) {
out = context.getOutputWindow();
}
public static Properties logProperties = null;
public static String logModel = null;
static {
try {
{
//获得日志等级
String logPropertiesFilePath = PluginUtils.ConfigDir + File.separator + LogConstants.LogPropertiesFileName;
logProperties = new Properties();
logProperties.load(new FileInputStream(logPropertiesFilePath));
logModel = logProperties.getProperty(LogConstants.LogProperties_Key_LogModelName);
}
// RollingFileAppender
String logFilePath = PluginUtils.LogsDir + File.separator + LogConstants.LogFileName;
RollingFileAppender rollingFileAppender = new RollingFileAppender(new PatternLayout("%d %p [%c] - %m%n"),
logFilePath, true);
rollingFileAppender.setName("logfile");
rollingFileAppender.setMaxFileSize("2048KB");
rollingFileAppender.setMaxBackupIndex(8);
Logger.getRootLogger().addAppender(rollingFileAppender);
} catch (IOException e) {
}
}
@SuppressWarnings("rawtypes")
public static ChsLogger getLogger(Class className) {
return new ChsLogger(className);
}
@SuppressWarnings("rawtypes")
private ChsLogger(Class className) {
logger = Logger.getLogger(className);
}
public void info(Object message) {
logger.error(message);
out.println(String.valueOf(message));
}
public void info(Object message, Throwable t) {
logger.error(message, t);
out.println(String.valueOf(message));
out.println(t.toString());
}
public void debug(Object message) {
debug(message, null);
}
public void debug(Object message, Throwable t) {
if ("DEBUG".equalsIgnoreCase(logModel)) {
out.println(String.valueOf(message));
if (t != null) {
logger.error(message, t);
out.println(t.toString());
} else {
logger.error(message);
}
}
}
public void error(Object message) {
logger.error(message);
out.println(String.valueOf(message));
}
public void error(Object message, Throwable t) {
logger.error(message, t);
out.println(String.valueOf(message));
}
private String errInfo(Throwable t) {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
t.printStackTrace(pw);
pw.flush();
sw.flush();
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e) {
}
}
if (pw != null) {
try {
pw.close();
} catch (Exception e) {
}
}
}
return sw.toString();
}
public Logger getLogger() {
return logger;
}
public void setLogger(Logger logger) {
this.logger = logger;
}
}