file_put_contents记录的日志内容丢失

使用函数 file_put_contents()来记录日志,当多人同时操作,记录的日志会莫名其妙的丢失,即并发追加写时,日志会丢失。

经分析,是不正确使用函数 file_put_contents() 造成

int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
filename :写入的文件名和路径data     :写入的数据flags    :可选参数,FILE_USE_INCLUDE_PATH, FILE_APPEND(追加写),LOCK_EX(写入时获得一个独占锁)

LOCK_EX,写文件的时候先锁定,此时其他写入操作会队列等待。

       当写入完成时,其他写入操作才会执行。防止多人同时写入造成内容丢失。

file_put_contents($logFilename, $content, FILE_APPEND|LOCK_EX);

原文地址:https://www.cnblogs.com/muyibg/p/9382540.html

时间: 2024-10-09 10:50:37

file_put_contents记录的日志内容丢失的相关文章

【恢复】Redo日志文件丢失的恢复

第一章 Redo文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像.需要注意的是,RMAN不能备份联机Redo日志文件.所以,联机Redo日志一旦出现故障,则只能进行清除日志了.清除日志文件即表明可以重用该文件. 1.1.1  数据库归档/非归档模式下inactive redo异常ORA-00316

(转)nginx做转发时,带'_'的header内容丢失

原本在测试环境测试通过的APP,今天准备切到线上环境做最后测试,结果发现了错误.查看日志发现是APP端发送的http请求中的header内容丢失了.那么代码没有改动,怎么平白无故会丢失头信息? 于是想到两个环境的不同之处在于线上是通过nginx做的代理转发,会不会是nginx搞的鬼?于是搜索"nginx request header 丢失",果不其然是这个问题,nginx对下划线的头信息做了限制,找到问题所在就等于完成了一大半,办法总比困难多.遂决定记录之. - 方法一:不用下划线 既

点滴积累【C#】---使用log4net组件记录错误日志(以文本形式记录)

效果: 描述: 利用log4net组件进行错误日志的记录,log4net记录错误的方式我所了解的有4种,No.1 文本形式记录日志,No.2存储到数据库形式记录日志,No.3控制台控制显示日志,No.4Windows事件日志.本文所采用的是第一种形式------文本形式记录日志. 首先,引用log4net.dll文件,然后创建一个config文件,进行配置日志的相关信息,比如:配置路径,以及错误的显示形式等.然后创建一个Global.asax应用程序文件,用于第一次访问时执行配置文件.然后创建一

简单、强大记录网站日志。

using System; using System.Collections.Generic; using System.Web; using System.Text; using System.Reflection; using System.Collections; using System.Collections.Specialized; using System.Text.RegularExpressions; using System.IO; namespace Utils { ///

C# 使用Log4Net记录程序日志

在之前的博客中,写过使用系统内置的Trace类记录程序日志,具体请参考:C# 使用Trace记录程序日志.这篇博客将介绍如何使用Log4Net记录程序日志. 首先需要引用Log4Net.dll,我们可以使用Visual Studio的NuGet来引入,也可以从官网上面下载.下面是一个简单的LogHelper类, using log4net; [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace CommonLibra

asp.net MVC自定义错误页,并记录错误日志

只需要在Global.asax文件中添加以下代码,则可以在出错后友好的展示错误页,也不需要在很多地方写记录错误日志的代码 protected void Application_Error(object sender, EventArgs e) { if (HttpContext.Current.IsCustomErrorEnabled) { return; } var exception = Server.GetLastError(); var httpException = new HttpE

ASP.NET记录错误日志的方式

程序记录错误日志是一种看起来对一般用户没什么作用,但对程序开发者用处很大的东西,它能查出错误或异常的程序马迹.那么,常用的记录错误日志的方式有哪些呢? 大多数情况下使用的是 1.直接记录为txt/xml文件 2.Windows Event Log 其他记录错误日志的方式 1.当前进程的本地队列 没有简单高效的持久化机制实现,单次调用效率会降低 2.MSMQ (1).非进程内消息队列,单次调用速度上,没有进程内部本地队列速度快 (2).内建持久化机制,即便down机,信息也不会丢失 (3).能简单

记录到日志中的异常栈缺失

项目中有这样一个场景: 使用反射处理所有业务调用,在反射调用点使用try-catch集中处理异常,并将异常信息记录到日志.其中日志记录是异步的. 问题: 记录到日志中的异常的StackTrace和有时候和Debug时抛出的异常的StackTrace不一样. 原因: 由于记录日志是异步的,如果记录日志发生在throw之前,记录到日志中的异常的StackTrace就是正确的(异常真正发生点到throw点的所有StackTrace):如果记录日志发生在throw之后,记录到日志中的异常的StackTr

记处理线上记录垃圾日志 The view 'Error' or its master was not found

最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Search/Error.aspx ~/Views/Search/Error.ascx ~/Views/Shared/Er