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 : ServiceBase
到static class Program
我还将 Logger 和 Service1 的 private 更改为 public 到 Program。
【讨论】:
如果您有更新,请edit您的问题。 在我的 Service1 中我使用的是线程,也许这就是 log4net 为来自线程的每条消息创建一个新文件的原因?以上是关于Log4net 总是在 Windows 服务中生成一个新文件作为 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
在 win32 服务 (C++) 中生成 casablanca http_listener 的问题
在 Windows 8 中生成地图应用程序的 URL [关闭]
R语言使用edit函数在Rsudio中生成数据编辑器(在windows中生成编辑器)在编辑器中输出需要的数据生成最终的dataframe