重构服务器的时候,各功能服务器统一了日志记录方式,无论是短信服务器(C#)还是彩信服务器(JAVA)均调用一个delphi写的win32 的dll LogWriter.dll。
LogWriter有2个作用:
1:在当前目录下生成Log文件夹,并按一定格式生成日志文件。
2:创建/访问一个块特定的Filemap区,实时写入日志记录。
注:Filemap 指windows的内存文件映射。
查看日志使用一个LogViewer.exe 自主软件,2种方式查看日志:
1:“运行”状态下实时查看,Logviewer 实时访问Filemap区域,读取各个服务器实时写入的记录(可根据条件过滤服务器类型 日志类别 日志级别等)。
2:“停止”状态下可以打开在各服务器目录下的Log文件夹下的日志文件。
在短信服务器改为Windows Service 方式时,调用了上述的LogWriter.dll 记录日志。测试中发现,LogWriter 可以向当前目录下创建Log文件夹并生成日志文件,但不能向FileMap写实时日志记录,LogViewer 不能读取到实时日志文件,跟踪了一下程序发现,LogWriter 在向Filemap中写入实时日志文件时,发生了没有权限的异常。
分析原因后发现,部署短信服务为Windows Service 时,其登陆为“LocalService”,Local Service 帐户对于资源和对象的访问级别与 Users 组的成员相同。后将ServiceProcessInstaller.Account 更新为Local System后,问题解决。
有关服务权限详细内容,可查看微软帮助:
http://technet2.microsoft.com/WindowsServer/zh-CHS/Library/a958b9d2-3ec1-4ab0-9f9f-7cb396605f3e2052.mspx?mfr=true
C#添加服务的安装程序时,默认使用的登陆帐户为:LocalServer,启动方式为manual,如服务器需要特定访问权限和启动方式,均须修改。
无他,介绍一下日志记录和查看的解决方案,排除了一个错误。