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

本文解决了一个在Windows服务中使用log4cxx时无法生成日志的问题。问题出现在程序运行目录变更,导致配置文件无法被找到。提供了两种解决方案:一是修改配置文件路径;二是通过chdir()接口更改工作目录。

    最近因为项目要求需要将一个程序写进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();就能解决日志不产生的问题了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值