win7系统下服务程序调用log4cxx不能正常产生日志

    最近因为项目要求需要将一个程序写进windows服务中,并且程序中调用log4cxx作为日志打印输出工具。程序在前台运行的时候能正常的生成打印输出日志。但是,当写进windows服务后,没有生成对应的日志文件。百思不得其解,后来在网上寻找相似的案例,很庆幸的是果然有人碰到类似的情况;帖子链接如下:

点击打开

    不过很尴尬的是,这位博主只是指出了错误的原因,并简单的描述了一下情况;这边我总结一下导致的原因就是在于当你把程序写进windows服务之后,程序的运行目录会变成C:\Windows\System32目录下(具体是不是这个目录是根据系统版本来看的),所以你的程序找不到log4cxx的配置文件,自然就不会生成相应的日志文件了。服务运并没有提供具体的解决办法。。。没办法只能自己折腾了;这边我想到了两种解决办法

     一,就是把你的日志配置文件放到服务的运行目录下或者在加载log4cxx配置文件的时候指定好文件的绝对路径,就可以生成日志文件。当然这种方式显得有些蠢笨,因为你生成的日志文件也要写成绝对路径;这样程序安装时候就比较不灵活了;

    二,在服务程序中调用chdir()接口,将运行目录更改为程序可执行文件的路径,这样你就可以保持原先程序的配置,不需要更改绝对路径,使用起来也更加灵活;

#include <direct.h>		/* for chdir() */
  
int chdir(const char *path);

功 能:更改当前工作目录。
参 数:Path 目标目录,可以是绝对目录或相对目录。
返回值:成功返回0 ,失败返回-1

    上述的path对应的就是程序当前可执行文件的目录路径,你只要调用相应的windows接口获取到路径后,再调用chdir();就能解决日志不产生的问题了


猜你喜欢

转载自blog.csdn.net/wqwqh/article/details/79726635
今日推荐