• 如何在 Windows 服务中正确使用 log4net


    前几天写了一个 Windows 服务程序,其中使用 log4net 却总是失败。
    不论 log4net 的配置写在 app.config 里,还是独立的 config 文件里,都是一样。
    今天终于发现原来是在服务里不能正确定位到这个配置文件所致。
    于是经过尝试之后,发现关键在于如下代码中获取当前 exe 所在目录并用于得到 config 文件的路径。按这个写法就可以正确输出日志了:

    public class Service1 : ServiceBase
    {    
        
    // 进程的主入口点
        private static void Main()
        
    {
            
    string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
            
    string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
            
    string configFilePath = assemblyDirPath + "\\log4net.config";
            DOMConfigurator.ConfigureAndWatch(
    new FileInfo(configFilePath));
            ServiceBase[] ServicesToRun;
            ServicesToRun 
    = new ServiceBase[] {new Service1()};
            ServiceBase.Run(ServicesToRun);
        }

        
    // 其他略
    }

    其他的不多写了,附带我的 log4net.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
        
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            
    <file value="Logs/log.txt" />
            
    <appendToFile value="true" />
            
    <rollingStyle value="Size" />
            
    <maxSizeRollBackups value="10" />
            
    <maximumFileSize value="100KB" />
            
    <staticLogFileName value="true" />
            
    <layout type="log4net.Layout.PatternLayout">
                
    <conversionPattern value="%d [%t] %-5p %c [%x] -%m%n" />
            
    </layout>
        
    </appender>

        
    <root>
            
    <level value="ALL" />
            
    <appender-ref ref="RollingLogFileAppender" />
        
    </root>
    </log4net>    
  • 相关阅读:
    Python 文件操作
    Python 操作 sqlite
    Python中的random模块
    Linux系统下的/etc/nsswitch.conf文件
    Python 列表/元组/字典总结
    快斗之翼:python2的print和python3的print()
    田小计划:图解Python深拷贝和浅拷贝
    Python 自省指南
    Python运算符优先级
    tc: 模拟网络异常的工具
  • 原文地址:https://www.cnblogs.com/RChen/p/217832.html
Copyright © 2020-2023  润新知