写操作系统的日志文件

Redis第二弹,服务器宕机,数据丢了怎么办? Redis作为内存型的数据库,虽然很快,依然有着很大的隐患,一旦服务器宕机重启,内存中数据还会存在吗?很容易想到的一个方案是从后台数据恢复这些数据,如果数据量很小,这倒是一个可行的方案。但是如果数据量过大,频繁的从后台数据库访问数据,压力很大;另外一方面恢复数据的时间极慢。对于Redis来说,实现数据的持久化和快速恢复是至关重要。今天这篇文章就来介绍一下Redis持久化的两种机制AOF日志、RDB快照。AOF()日志称之为写后日志,即是命令先执行完成,把数据写入内存,然后才会记录日志。AOF。 阅读详情

现在做的项目中有这个功能,查了一整天才弄懂了点,没接触过,连资料也不好找。参照资料和自己所做的程序,写篇简易的文档。

写操作系统的日志文件

1. 以 MC 为扩 展名 创 建一个包含消息描述的文本文件。 该 文件的格式非常特 别,简单介绍一下 ( 具体 细节 参 见 Platform SDK 文档 )
 
① 基本格式:
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
 MessageId=xxx
 SymbolicName=IDS_EVT_MYDEFINE
 Language=English
 
 mydefine event string goes here.if there's parameters use %1 %2...
 .
 //must use . to end one event message define.
 
 MessageId=xxx//next block...
 .
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
② 如果使用中文,在文件最初定义
LanguageNames =(Chinese=0x804:MSG00804)//0x804 为 CodePage , MSG00804 为定义文件名称( mc 输出的 .bin 文件)。然后替换基本格式中的 Language 字段,如下 Language=Chinese
 
说明:默认的语言是英语,此时"LanguageNames="那句可以省略;
%1,%2等表示从ReportEvent传来的参数;
注意注释时";"与";//"的不同用法.mc编译器会忽略";"后面的字符,但会把他们写到*.h文件里.
 
③ 如果支持多种语言,则如下定义
LanguageNames=(English=0x409:MSG00409)
LanguageNames=(Chinese=0x411:MSG00411)
MessageId=0x1
Severity=Error
Facility=Runtime
SymbolicName=MSG_BAD_COMMAND
Language=English
You have chosen an incorrect command.
Language=Chinese
.
  ④ 文件必须以一个空行结束,即在最后一个信息定义块的 ' .' 后加回车换行
 
 
2. 使用 mc 编译此文件 .
① mc.exe 是 VC 带的工具 ( 我装了 .NET ) ,路径 参考 :
C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/Tools/Bin
② 进 dos ,使用 mc 编译文件。如果你的项目使用 UNICODE ,如下: mc myevt.mc ;否则必须加入命令选项: mc myevt.mc -A 。将生成的三个文件 myevt.rc myevt.h MSG00804.bin 。
 
3 .制作好这三个文件之后。制作 DLL 。(只用过通过制作 DLL 的方法来写 log ,所以只记录这方面内容。)
用 vc 生成一个空 win32dll 框架 , 将生成的三个文件 加 进 来 编译。得到一个 DLL 文件。
 
4. 在注册表中添加自己的键: HKEY_LOCAL_MACHINE /SYSTEM/CurrentControlSet/Services/EventLog/Application/ myevt (自定) , 设上值: d:/ myevt .dll ( DLL 文件位置),可用 API 函数( RegCreateKeyEx , RegSetValueEx )。
 
5. 用 RegisterEventSource( NULL," myevt " ) 打开事件源,返回一句柄,然后以此句柄 ReportEvent ,即完成日志的写入。可在事件管理器中察看:右键我的电脑 → 管理 → 系统工具 → 事件视图。具体事件是属于“应用程序”,“系统”还是“安全”,则看 ReportEvent 时的参数了。
介绍完毕,非常混乱,附上自己做的实例,希望对大家有所帮助:
 
附录:
Ⅰ.mc 文件: MyEvent.mc
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
;//begin==============================================================
;#ifndef __ERRLOG_H__
;#define __ERRLOG_H__
LanguageNames=(Chinese=2052:MSG0052)
 
SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
               Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
               Warning=0x2:STATUS_SEVERITY_WARNING
               Error=0x3:STATUS_SEVERITY_ERROR
              )
 
MessageId=1000 Severity=Success SymbolicName=CM_ERR_LOG_FAILED
Language= Chinese
● 错误输出的内容是 :「%1」.
● 错误的原因是 :「%2」.
.
 
;#endif //__ERRLOG_H__
;//end================================================================
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
 
Ⅱ. 程序
#define KEY_NAME   _T("Acr_ErrLog") /* Key 名 */
#define EVENT_ID   1000              /* 事件 ID */
#define ENTRY      _T("EventMessageFile")      /* 子键 */
#define REG_PATH   _T("SYSTEM//CurrentControlSet//Services//EventLog/
//Application// My_Event ")  /* 注册表路径 */
 
static int RegSet() ;
 
Main()
{
         char szTempMsg [10] = “ 文件打开出错 ” ;
         char szErr [10] = “ 没有权限 ” ;
 
          if ( ACR_RET_NORMAL == RegSet() )
         {
                   WriteEventLog( szTempMsg, szErr );
         }
}
 
/* 参照上面说明 4 :在注册表中添加自己的键, 设上值 */
int RegSet()
{
         HKEY     hkKey;
         LONG     lResult;                    /* 返回值           */
         DWORD    dwDisposition;              /* Key 是否已经存在的标志 */
         char     szFilePath[MAX_PATH];       /* DLL 文件的位置    */
 
         /* 打开指定的注册表 Key ,如果 Key 不存在的话新建一个 。 */
         lResult = RegCreateKeyEx( HKEY_LOCAL_MACHINE,
                   REG_PATH, /* 参照 define */
                   0,
                   NULL,
                   REG_OPTION_NON_VOLATILE,
                   KEY_ALL_ACCESS,
                   NULL,
                   &hkKey,
                   &dwDisposition );
 
         if( lResult )
         { 
                   return ACR_RET_SYSERROR;
         }
 
         /* DLL 文件路径取得 */
         GetAppPath( szFilePath );
          strcat( szFilePath, _T("//") );
          strcat( szFilePath, _T(" MyEvent .dll ") );
 
         /* 指定されたレジストリキーに所属する、
         指定されたレジストリエントリのデータを設定します。 */
         if( ERROR_SUCCESS != RegSetValueEx( hkKey,
                                  ENTRY, /* 参照 define */
                                  0,
                                  REG_EXPAND_SZ,
                                 (LPBYTE)szFilePath,
                                 (DWORD)_tcslen( szFilePath )+1) )
         {
                   return ACR_RET_SYSERROR;
         }
 
         RegCloseKey( hkKey );
         return ACR_RET_NORMAL;
}
 
/* 功能参照上面说明 5 。参数为要写入日志的内容, 1 为错误内容, 2 是错误原因 */
void WriteEventLog( char* szMsg, char* szErr )
{
         HANDLE hEventLog; 
         char *szEventLogArgs[2];    /* 写入的内容 */
 
         /* 内容处理 */
         if( NULL != szMsg )
         {
                   szEventLogArgs[0] = szMsg;
         }
         else
         {
                   szEventLogArgs[0] = _T("NULL");
         }
 
         if( NULL != szErr )
         {
                   szEventLogArgs[1] = szErr;
         }
         else
         {
                   szEventLogArgs[1] = _T("NULL");
         }
 
         /* 打开事件源 */
         hEventLog = RegisterEventSource( NULL, KEY_NAME );
 
         if( NULL != hEventLog )
         {
                   /* 内容写入 */
                   ReportEvent( hEventLog,
                            EVENTLOG_INFORMATION_TYPE,
                            0,
                            SPCM030_EVENT_ID,
                            NULL,
                            2,
                            0,
                            szEventLogArgs,
                            NULL );
         }
 
         DeregisterEventSource(hEventLog);
}
 
日志文件系统 非常好的一篇文档,讲的是日志文件系统的设计与实现,对阅读F2F2S,JFS这些文件系统大有裨益 立即下载

相关推荐

Windows tail查看日志命令工具.rar

软件介绍: 以WINDOWS视图模式使用的tail日志查看工具,不是以前以命令行模式运行的查看运行日志,能够直接在Windows下的运行的小工具。使用方法:下载后解压,把tail.exe 复制到 目录:C:\Windows\System32 下直接输命令就可以了: tail -f 文件路径

自制操作系统日志——第五天

今天是该系列的第五天。今天的任务就是1、采用结构体形式;2、利用像素矩阵的方法进行字符串的显示;3、GDT/IDT的初始化。

qq_43696276的博客 501

使用单调栈求解最大矩形面积问题的C++实现

通过本文的介绍,我们详细讲解了如何使用单调栈求解砖墙中最大矩形面积的问题,并提供了完整的C++代码实现。希望通过本文的学习,你能掌握单调栈的基本概念及其在实际问题中的应用。如果你有任何疑问或建议,欢迎在评论区留言交流。

m0_57781768的博客 814

“自动修复“无法修复你的电脑,日志文件:C:\Windows\System32\Logfiles\Srt\SrtTrail.txt

解决"自动修复"无法修复你的电脑,日志文件:C:\Windows\System32\Logfiles\Srt\SrtTrail.txt

lznmvp777的博客 7万+

Vivado IP核调参大师:高效配置RS编码器的避坑指南

本文深入解析Vivado中RS编码器IP核的高效配置方法,涵盖符号宽度选择、码长优化和AXI4-Stream接口控制等关键参数。重点指导如何避开常见陷阱,实现FPGA设计中的资源优化与性能平衡,提升RS编码在通信系统中的可靠性。

metaverse5vr的博客 222

大模型推理常见采样策略:Top-k, Top-p, Temperature, Beam Search

大模型推理采样策略,举例通俗易懂汇总介绍

qq_43243579的博客 2万+

Windows 10 开机失败 C:\Windows\System32\Logfiles\Srt\SrtTrail.txt 日志问题

问题: 早上打开 Windows 10 电脑,遇到如下问题: 解决 尝试点击高级 -> 进入命令行模式 -> 执行 sfc /scannow 但是遇到 windows 资源保护无法执行该请求 尝试点击高级 -> 启动修复 -> 禁用驱动器签名加载,启动成功 可能原因 装了驱动精灵或者昨晚自动更新时把电脑强制关机了 参考 https://tieba.baidu.com/...

xchenhao 的博客 6万+

飞傲Fiio+foobar2000 实现dsd解码+灯正常显示

飞傲Fiio+foobar2000 实现dsd解码+灯正常显示。安装后可将DSD格式的数据通过ASIO驱动传输至DAC。安装后可识别DAC的ASIO驱动。安装后可识别DSD文件。

yanlei7993的博客 2303

电脑蓝屏 无法修复你的电脑日志文件 SrtTrail.txt 解决方法 避免重装系统

今天遇到问题 首先使用windows蓝屏中高级选项 自动修复 反复修复几次,如果解决不了 在高级选项中找到命令行模式 切换到 C:\Windows\System32\LogFiles\Srt 目录 命令行模式直接输入C:\Windows\System32\LogFiles\Srt 就可以切换到这个目录 (不行的话用cd C:\Windows\System32\LogFiles\Srt) 命令行模式type SrtTrail.txt 查看日志内容 当时恢复的时候没拍照,type SrtTra

张必安的博客 8万+

AI编程实战:用Spec Coding与Codex半小时重构全栈项目

这次我们来看一个能显著提升全栈开发效率的实战方法:利用 AI 编程工具 Codex 和 Spec Coding 工作流,将原本需要数周甚至一个月的全栈项目重构工期,压缩到半小时级别。这不是概念探讨,而是基于现有工具链的、可立即上手的工程实践。 对于前端开发者或全栈工程师而言,面对老旧项目重构、技术栈升级或从零搭建新项目时,最大的痛点往往是重复性、模式化的代码编写工作。手动编写 CRUD 接口、页面组件、状态管理和联调测试,耗时费力且容易出错。而 AI 辅助编程的核心价值,正是在于将开发者从这些“体力活”中解

weixin_33525298的博客 290

【3DSlicer】基于心脏ct影像重建3d模型及导出

软件:3DSlicer4.11 基于心脏ct影像重建3d模型

Liuees的博客 1万+

【转载】C:\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt” 解决方案

将原文搬运在到优快云, 希望更多的有需要的小伙伴看到。最近电脑崩溃了一次,蓝屏无法开机。幸好在网上找到解决办法。

wps6129的博客 4万+

GIS常用符号化色带(超级色带)根据python制作

GIS自带的色带比较单一,今天分享一款色带,应用之后大家出图的时候可以选择更多的配色,符号化/点击色块/样式引用/将样式添加至列表即可。色带类型比较多,大家可以自己尝试下不同的风格。简单符号化一下,看看效果。以中国县级行政区划为例,

J_Giser的博客 2639

oracle lgwr 如何写redolog

例如一个实例只有一个redo thread,即一个LGWR,对吧? 但是一个日志组,假设里面有3个日志成员,那么一个LGWR如何同时向3个日志成员写呢? 明显做不到啊?在一个时间段内,一个thread只能写一个日志成员吧? from:Yong Huang log file headers are written sequentially (wait event: log file sing

Lixora's DB Home 1225

zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三

zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三

weixin_72050316的博客 1386

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Innodb Double Write

Innodb使用的一种非常有趣的技术是称为“doublewrite”的技术。这意味着Innodb在执行表空间写入时会写入两次数据 - 对日志文件的写入只执行一次。 那么为什么需要双写呢?在部分页面写入的情况下,需要存档数据安全性。Innodb不会将完整页面记录到日志文件中,而是使用所谓的“生理”日志记录,这意味着日志记录包含操作的页码以及操作数据(即更新行)和日志序列信息。这种日志记录结构是ge...

weixin_30414305的博客 118

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

mysql数据库突然变慢_数据库正常运行,突然变慢的解决思路

数据库正常运行,突然变慢的解决思路:1、查看数据库版本(select * from v$version)2、查看操作系统的进程(top,ps -ef)3、查看操作系统的IO情况(sar 1 10)4、制作awr报表,查看报告在报告中:EventWaits%Time -outsTotal Wait Time (s)Avg wait (ms)Waits /txncontrol file parall...

weixin_39790168的博客 2235

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

linux 同步IO: sync、fsync与fdatasync

传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)(Bach [1986]第3章详细讨论了缓冲区高速缓存)。 延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲

wenj12的博客 548

impdp报错: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误

windows平台下,oracle 11.2.0.1在使用impdp向测试环境导入数据的时候,报出如下错误:     错误原因: 数据泵在写日志文件的时候,使用的是数据库字符集。如果客户端的环境变量NLS_LANG得值和数据库字符集不一致的话,日志中显示的表名称可能和终端屏幕输出的不一致。数据泵内部使用的是包UTL_FILE,在和NLS转换的时候可能不能输出字符。 #查看测试库 ...

weixin_34321977的博客 882

Oracle数据库恢复:归档日志损坏案例一则

链接:http://www.eygle.com/archives/2010/11/recover_archivelog_corruption.html 最近在紧急故障处理时,帮助用户恢复数据库遇到了一则罕见的归档日志损坏案例,在这里和大家分享一下,看看是否有人遇到过类似的问题。 在进行归档recover时,数据库报错,提示归档日志损坏: *** Corrupt block seq:...

javayestome 167

ext显示服务器文件,Linux 服务器操作系统中常见的Ext3文件系统

Ext3文件系统是直接从Ext2文件系统发展而来,目前Ext3文件系统已经非常稳定可靠,它完全兼容Ext2文件系统,用户可以平滑地过渡到一个日志功能健全的文件系统。Ext3日志文件系统的思想就是对文件系统进行的任何高级修改都分两步进行。首先,把待写块的一个副本存放在日志中;其次,当发往日志的I/O 数据传送完成时(即数据提交到日志),块就写入文件系统。当发往文件系统的I/O 数据传送终止时(即数据...

weixin_42515364的博客 290

linux 关机 关机_意外关机如何危害Linux计算机?

linux 关机 关机Are unexpected shutdowns as harmful to Linux as they are to other operating systems? Read on as we investigate the effects of catastrophic system shutdowns on Linux file systems. 意外关闭是否对Lin...

cuma1988的博客 667

linux操作系统--如何查看超大日志文件

如果使用`cat`命令查看日志文件时发现内容不全,可能是因为日志文件太大,导致终端无法显示所有内容。在这种情况下,您可以使用`less`或`more`命令来查看日志文件的内容。

MHD0815的博客 2449

从“一步一步写操作系统”到“一步一步抄操作系统”

前段时间在阅读《一步一步写嵌入式操作系统》,按照书本的内容一步一步写操作系统。不过在写的过程中比较纠结,因为《一步一步写嵌入式操作系统》一书提供了完整的样例代码,完全按照书中的内容一句一句敲代码视乎比较愚蠢,像小学的时候抄《小学生守则》一样。如果不敲代码,直接将网上下载的样例代码编译运行一遍又没有什么效果,不能深入理解其中原理。于是产生了一步一步“抄”一个操作系统的想法,基本做法就是按照《一步一步

keyboardOTA的专栏 3420
下一篇: 内存管理:_CrtDumpMemoryLeaks和_CrtSetBreakAlloc
rye_grass
博客等级 码龄20年 21粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值