QT中使用一个信号量来写日志文件?

QT中使用一个信号量来写日志文件?,第1张

你的代码我是懒得看了;看了前面一点,就觉得你这写的有问题,没有充分利用QT带的功能。给你个我的思路:

(1) 新启动一个QThread thread,该线程只运行一个事件循环(QEventLoop looploop.exec())

(2)将写日志文件功能单独抽象成一个继承QObject的类LogHelp

class LogHelp :public QObject

{

Q_OBJECT

public:

void Write(QString log){emit NotifyWrite(log)}

signal:

void NotifyWrite(QString log)

public slot:

void OnWrite(QString log){/*你的核心写文件代码*/}

(3)LogHelp logHelp 对象需要 movetothread 到(1)中创建的线程;logHelp.moveToThread(&thread)

(4)重点:connect(&logHelp,SIGNAL(NotifyWrite(QString)),&logHelp,SLOT(OnWrite(QString)),Qt::QueuedConnection)

如此你就可以在其它线程中直接调用logHelp .Write(log)不用管数据安全问题。

代码手敲,可能有问题,只是告诉你个思路。这样写不用维护队列,使用的是信号和槽函数的异步队列方式。

1.先弄个日志记录的类//////使用LOG4NET记录日志的功能,在WEB.CONFIG里要配置相应的节点///publicclassLogHelper{//log4net日志专用publicstaticreadonlylog4net.ILogloginfo=log4net.LogManager.GetLogger("loginfo")publicstaticreadonlylog4net.ILoglogerror=log4net.LogManager.GetLogger("logerror")publicstaticvoidSetConfig(){log4net.Config.XmlConfigurator.Configure()}publicstaticvoidSetConfig(FileInfoconfigFile){log4net.Config.XmlConfigurator.Configure(configFile)}//////普通的文件记录日志//////publicstaticvoidWriteLog(stringinfo){if(loginfo.IsInfoEnabled){loginfo.Info(info)}}//////错误日志/////////publicstaticvoidWriteLog(stringinfo,Exceptionse){if(logerror.IsErrorEnabled){logerror.Error(info,se)}}}2.WEB.CONFIG配置在configSections节点上添加:然后配置单独的节点:3.在GOLBAL文件里调用写日志:voidApplication_Start(objectsender,EventArgse){//在应用程序启动时运行的代码//初始日志的配置LogHelper.SetConfig()}voidApplication_Error(objectsender,EventArgse){//在出现未处理的错误时运行的代码ExceptionobjExp=HttpContext.Current.Server.GetLastError()stringusername=""stringuserid=""if(Session["ulogin"]!=null){string[]uinfo=Session["ulogin"].ToString().Split('|')userid=uinfo[0]username=uinfo[1]}Aotain114.Public.LogHelper.WriteLog("\r\n用户ID:"+userid+"\r\n用户名:"+username+"\r\n客户机IP:"+Request.UserHostAddress+"\r\n错误地址:"+Request.Url+"\r\n异常信息:"+Server.GetLastError().Message,objExp)}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11834019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存