java日志类多线程同步问题!

luoyahu luoyahu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如题:现在要做一个日志工具类.主要是保存系统生成的日志.
现在遇到多线程访问时不同步的问题.

KLinkLog.initKingLog("c://kinghi1.log", KLinkLog2.DEBUG, "c://log", 100);
KLinkLog.writeLog(KLinkLog2.NORMAL, "kinghi-test1-"+this.hashCode());
initKingLog和writeLog都是synchronized的.

假如出现当一个线程写C://kinghi1.log.而另一个线程写C://kinghi2.log时.
出现的线程又写到了kinghi1.log.也写到了kinghi2.log

代码如下:

public class KLinkLog {
public final static int DEBUG = 3;
//日志名
private static String logName = "./Kinghi.log";
//日志级别
private static int level = 2;
//备份路径
private static String bakPath = null;
//日志文件最大大小
private static int maxSize = 100;
//日期格式化
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.SSS");

private KLinkLog() {

}

public static synchronized void initKingLog(String logName,int level,String bakPath,int maxSize)
{
//参数检测
if(level == KLinkLog.NONE || level < KLinkLog.NONE || level > KLinkLog.DEBUG
|| logName == null ||logName.equals("")
|| maxSize <=0)
{
return;
}
else
{
KLinkLog.logName = logName;
KLinkLog.level = level;
KLinkLog.bakPath = bakPath;
KLinkLog.maxSize = maxSize;

}

}
/**
* 向日志中写日志
* @param level 日志级别
* @param message //写入消息
* @return 返回1为没有写入.返回0为写入成功
*/
public static int writeLog(int level, String message)
{
//.............I/O操作
}
}

解决100分送上.
...全文
评论 9
收藏 已收藏
分享
返回顶部
luoyahu
Java SE 62,621 成员 307,251 内容