从 WCF 服务库项目调用时,Log4Net 记录器 class 没有创建文件?
Log4Net logger class not creating file when called from WCF Service Library Project?
在 class 库项目中有这个 Log4net class。使用 .dll 后从 windows 应用程序访问时,将创建文件并写入日志。
在我的 WCF 服务库项目中使用与我的 class 库项目相同的 .dll 时,根本没有创建该文件。
我从 windows 应用程序和 wcf 服务库项目写入日志的方式与下面完全相同。
为什么从 WCF 调用时行为不同?
我如何从同一解决方案中的其他项目调用记录器 class:
public Logger Logger;
Logger = Logger.Instance();
Logger.Debug("Product Service is called");
Class 图书馆项目中的记录器 Class:
public class Logger
{
private static volatile Logger instance;
private static object syncRoot = new Object();
private static log4net.ILog logger = null;
private object _lock = new object();
private Logger()
{
if (logger == null)
{
XmlConfigurator.Configure();
logger = log4net.LogManager.GetLogger("LoggerManager");
}
}
public static Logger Instance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Logger();
}
}
return instance;
}
public void Info(string info, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
{
lock (_lock)
{
logger.Info(string.Format("Info : {0} in member {1}, file {2} at line {3}", info, memberName, filePath, lineNumber));
}
}
}
log4net.config.xml :
<log4net debug="false">
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="c:\Logs\App.Log" />
<threshold value="ALL" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maximumFileSize value="1MB" />
<maxSizeRollBackups value="10" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="*%-10level %-30date %message [%logger] [%thread] %newline" />
</layout>
</appender>
<logger name="Logger">
<level value="ALL"/>
<appender-ref ref="RollingFileAppender"/>
</logger>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
您的 WCF 服务的 app.config
文件中是否有 <log4net>
部分?如果缺少,将不会创建日志文件。
编辑
在聊天室中追踪问题后,解决方案是复制 WCF dll 输出目录中缺少的 log4net.config.xml
。然后日志文件出现了。
在 class 库项目中有这个 Log4net class。使用 .dll 后从 windows 应用程序访问时,将创建文件并写入日志。
在我的 WCF 服务库项目中使用与我的 class 库项目相同的 .dll 时,根本没有创建该文件。
我从 windows 应用程序和 wcf 服务库项目写入日志的方式与下面完全相同。
为什么从 WCF 调用时行为不同?
我如何从同一解决方案中的其他项目调用记录器 class:
public Logger Logger;
Logger = Logger.Instance();
Logger.Debug("Product Service is called");
Class 图书馆项目中的记录器 Class:
public class Logger
{
private static volatile Logger instance;
private static object syncRoot = new Object();
private static log4net.ILog logger = null;
private object _lock = new object();
private Logger()
{
if (logger == null)
{
XmlConfigurator.Configure();
logger = log4net.LogManager.GetLogger("LoggerManager");
}
}
public static Logger Instance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Logger();
}
}
return instance;
}
public void Info(string info, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
{
lock (_lock)
{
logger.Info(string.Format("Info : {0} in member {1}, file {2} at line {3}", info, memberName, filePath, lineNumber));
}
}
}
log4net.config.xml :
<log4net debug="false">
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="c:\Logs\App.Log" />
<threshold value="ALL" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maximumFileSize value="1MB" />
<maxSizeRollBackups value="10" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="*%-10level %-30date %message [%logger] [%thread] %newline" />
</layout>
</appender>
<logger name="Logger">
<level value="ALL"/>
<appender-ref ref="RollingFileAppender"/>
</logger>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
您的 WCF 服务的 app.config
文件中是否有 <log4net>
部分?如果缺少,将不会创建日志文件。
编辑
在聊天室中追踪问题后,解决方案是复制 WCF dll 输出目录中缺少的 log4net.config.xml
。然后日志文件出现了。