zoukankan      html  css  js  c++  java
  • 如何在 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>    
  • 相关阅读:
    php -- php数组相关函数
    php -- 数组排序
    php -- in_array函数
    php -- 魔术方法 之 删除属性:__unset()
    无符号整型与有符号整型相运算规则
    N个节点的二叉树有多少种形态
    getopt_long
    typedef
    约瑟夫环问题算法(M)
    C语言基础
  • 原文地址:https://www.cnblogs.com/RChen/p/217832.html
Copyright © 2011-2022 走看看