当前位置:首页 > CN2资讯 > 正文内容

我的世界java日志分分析工具

4天前CN2资讯


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

写操作系统的日志文件




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 /* 子键 */ #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; /* 返回值 */ /* 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 } /* 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 } RegCloseKey( hkKey ); return } /* 功能参照上面说明 5 。参数为要写入日志的内容, 1 为错误内容, 2 是错误原因 */ void 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); }


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/22211.html

    分享给朋友:

    “我的世界java日志分分析工具” 的相关文章

    2024年最佳云服务器推荐:如何选择性价比最高的云服务

    云服务器的基本概念与优势 云服务器是一种基于云计算技术的虚拟服务器,它通过互联网提供计算资源和服务。与传统的物理服务器相比,云服务器具有更高的灵活性和可扩展性。用户可以根据需求随时调整资源,无需担心硬件限制。云服务器的优势在于它的弹性、成本效益和可靠性。企业可以根据业务需求快速部署和扩展资源,同时只...

    如何高效管理Ubuntu服务器:从基础到高级的全面指南

    管理Ubuntu服务器是一个需要掌握多种技能的任务。从选择合适的Linux发行版到系统初始化,再到账号和权限管理,每一个环节都至关重要。以下是一些基础的管理技巧,帮助你更好地配置和管理Ubuntu服务器。 1.1 选择合适的Linux发行版 在国内,常用的Linux发行版有CentOS、Ubuntu...

    Siteground怎么样?深入分析其安全性、正常运行时间与客户支持

    Siteground的安全性实践 谈到Siteground的安全性实践,我总是很欣赏他们的努力。作为一个成立于2004年的托管服务商,Siteground在安全方面采取了多重措施。我注意到,首先,他们为所有用户提供免费的Let’s Encrypt SSL证书。SSL证书能够加密网站与访客之间的数据,...

    如何利用闲置VPS赚钱 - 探索多种盈利方式

    在互联网蓬勃发展的背景下,很多人手中会有闲置的VPS(虚拟私人服务器)。这些资源如果不加利用,往往就是一笔浪费。因此,了解闲置VPS赚钱的方法十分必要。这不仅可以让我们的小投资产生回报,也能为我们探索更广阔的网络世界提供平台。 闲置VPS的定义相对简单,指的是那些未被充分利用的服务器资源。它们通常具...

    获取国外动态IP服务的指南与优势

    在当今互联网的世界中,动态IP(Dynamic IP)逐渐成为了一个重要的概念。它指的是由互联网服务提供商(ISP)动态分配的、可变的IP地址。与固定不变的静态IP相比,每次连接互联网时,动态IP都可能发生变化。这种灵活性不仅高效利用了IP资源,还在多个领域产生了实际应用的优势。 动态IP的特点非常...

    Vultr DD Windows安装教程:轻松一步到位

    在云计算越来越流行的今天,Vultr作为一个强大的云服务提供商,吸引了大量用户。对于想在Vultr服务器上安装Windows的用户来说,使用DD命令是一种非常便利的方法。接下来,我将为你详细介绍如何通过这一方式在Vultr上安装Windows。 1.1 使用DD命令直接安装Windows 1.1.1...