【发布时间】:2012-10-17 06:17:27
【问题描述】:
我有 MyLogger 类,其中包含:
public class MyLogger {
private final static Logger logger = Logger.getLogger(MyLogger.class.getName());
private static FileHandler fileHandler;
private static String loggerFileName;
public MyLogger() {
}
public static void createMyLogger(String filename){
loggerFileName = filename;
try {
File loggerFile = new File(filename);
boolean fileExists = loggerFile.exists();
if(fileExists){
loggerFile.delete();
File lockFile = new File(filename+".lck");
if(lockFile.exists())
lockFile.delete();
}
fileHandler = new FileHandler(filename,true);
} catch (IOException e) {
e.printStackTrace();
}
logger.addHandler(fileHandler);
SimpleFormatter simpleFormatter = new SimpleFormatter();
fileHandler.setFormatter(simpleFormatter);
}
public static void log(String msg) {
logger.log(Level.INFO, msg);
}
public static void log(Exception ex) {
logger.log(Level.SEVERE, "Exception",ex);
}
public static String getLoggerFileName() {
return loggerFileName;
}
public static void setLoggerFileName(String loggerFileName) {
MyLogger.loggerFileName = loggerFileName;
}
我正在线程中进一步执行,即当我启动第一个进程时,会创建记录器文件并记录日志,但是当我启动另一个进程时,会再次创建不同的线程并创建新的记录器文件,但是由于静态方法和引用它混淆了两个记录器文件中的两个进程日志......
当我为每个线程启动进程时,会调用以下方法:
public void start(String process) {
try{
String filename = process.replace(".com", "");
MyLogger.createXPathLogger(filename.concat(WordUtils.capitalize(type))+ ".log");
MyLogger.log("got parameters ===>> process : "+process);
}catch (Exception e) {
MyLogger.log("Exception In main() method....");
MyLogger.log("*****"+process+" process failed In main() method.*****");
MyLogger.log(e);
}
}
那么我能做些什么呢,我可以做线程安全日志吗? 提前谢谢..
【问题讨论】:
-
最简单的方法应该是为您的
log方法添加synchronized关键字。 -
不,它不工作......它仍然混淆了日志。 :(
标签: java logging thread-safety java.util.logging filehandler