(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)不用管数据安全问题。
代码手敲,可能有问题,只是告诉你个思路。这样写不用维护队列,使用的是信号和槽函数纤贺的异步队列方式。
打印一次输出一辩姿次这个logo的标志,这是正常的。每次需要输出的时候都需要进行手动设置。要是连续打迟灶配印的话,应该也有设置选项。这个应该属于没有设置,对程序没有设置,对,重新设置一码指下城市程序即可。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)}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)