从WCF服务库项目调用Log4Net记录器类时未创建文件?

时间:2018-10-05 06:02:35

标签: c# wcf log4net

在类库项目中拥有此Log4net类。使用.dll后从Windows应用程序访问该文件时,将创建该文件并写入日志。

在WCF服务库项目中使用与类库项目相同的.dll时,根本不会创建该文件。

我从Windows应用程序和wcf服务库项目写入日志的方式与下面的完全相同。

为什么从WCF调用时行为不同?

在相同的解决方案中,我如何从其他项目中调用记录器类:

public Logger Logger;
Logger = Logger.Instance();
Logger.Debug("Product Service is called");

类库项目中的记录器类:

    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>

1 个答案:

答案 0 :(得分:1)

您的WCF服务的相应<log4net>文件中是否有app.config部分?如果丢失,将不会创建日志文件。

修改

在聊天室中跟踪问题之后,解决方案是将丢失的log4net.config.xml复制到WCF dll的输出目录中。然后出现日志文件。