Log4net 总是在 Windows 服务中生成一个新文件作为 WCF 服务

Posted

技术标签:

【中文标题】Log4net 总是在 Windows 服务中生成一个新文件作为 WCF 服务【英文标题】:Log4net always generates a new file inside a Windows Service as a WCF Service 【发布时间】:2020-10-08 04:28:47 【问题描述】:

声明我的记录器:

private static readonly ILog Logging = LogManager.GetLogger(typeof(Service1));

我的构造函数:

public Service1()

    InitializeComponent();
    InitializeLogging(@"c:\log\");

这就是我初始化记录器的方式:

public static void InitializeLogging(String Path)

    var patternLayout = new PatternLayout()
                        
                            ConversionPattern = "%utcdateyyyy-MM-dd HH:mm:ss.fff"
                                                + "|%level"
                                                + "|%class"
                                                + "|%method"
                                                + "|%line"
                                                + "|%timestamp"
                                                + "|%message"
                                                + "%newline"
                        ;

    patternLayout.ActivateOptions();

    RollingFileAppender roller = new RollingFileAppender()
                                     
                                         AppendToFile = true,
                                         File = Path,
                                         DatePattern = "yyyyMMdd HHmmss'.log'",
                                         Layout = patternLayout,
                                         StaticLogFileName = false,
                                         RollingStyle = RollingFileAppender.RollingMode.Date
                                     ;
    roller.ActivateOptions();

    BasicConfigurator.Configure(roller);

当 Windows 服务未启动时,log4net 会生成一个日志文件,其中包含一行代码“服务已启动”。

当调用 WCF 方法时,log4net 总是生成一个带有一行日志的新文件。当服务停止时,log4net 会在每个文件中写入“服务已停止”。

一天一个日志文件就够了:(

【问题讨论】:

为什么不使用 log4net 的配置文件,而是在 ctor 中的代码中进行呢?我希望会发生“有趣”的事情...... 另外,你的 DatePattern 说每秒滚动一次。 当我更改 DatePattern = "yyyyMMdd'.log'" 时,我得到以下日志文​​件,'20200618.log' 和 '20200618.log20200618' 和 '20200618.log20200618.log20200618'。日志' 【参考方案1】:

我已经移动了声明位置

private static readonly ILog Logging = LogManager.GetLogger(typeof(Service1));

class Service1 : ServiceBasestatic class Program

我还将 Logger 和 Service1 的 private 更改为 public 到 Program。

【讨论】:

如果您有更新,请edit您的问题。 在我的 Service1 中我使用的是线程,也许这就是 log4net 为来自线程的每条消息创建一个新文件的原因?

以上是关于Log4net 总是在 Windows 服务中生成一个新文件作为 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

在 win32 服务 (C++) 中生成 casablanca http_listener 的问题

在 windows 中生成声音频率 - VB.Net

在 Windows 8 中生成地图应用程序的 URL [关闭]

R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)在编辑器中输出需要的数据生成最终的dataframe

在 Windows 中生成 python ENOENT node.js

如何准备在单个 Windows 环境中生成 .dll 和 unix .so 的构建作业?