Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WCF服务库项目调用Log4Net logger类时未创建文件?_C#_Wcf_Log4net - Fatal编程技术网

C# 从WCF服务库项目调用Log4Net logger类时未创建文件?

C# 从WCF服务库项目调用Log4Net logger类时未创建文件?,c#,wcf,log4net,C#,Wcf,Log4net,将这个Log4net类放在类库项目中。使用.dll后从windows应用程序访问时,将创建文件并写入日志 在WCF服务库项目中使用类库项目的相同.dll时,根本不会创建该文件 我从windows应用程序和wcf服务库项目写入日志的方式与下面完全相同 为什么从WCF调用时行为不同 如何从同一解决方案中的其他项目调用logger类: public Logger Logger; Logger = Logger.Instance(); Logger.Debug("Product Service is c

将这个Log4net类放在类库项目中。使用.dll后从windows应用程序访问时,将创建文件并写入日志

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

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

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

如何从同一解决方案中的其他项目调用logger类:

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>

您的WCF服务是否在相应的
app.config
文件中有
部分?如果缺少,则不会创建日志文件

编辑


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

为什么我应该在WCF服务项目的app.config中使用log4net?它在logger类所在的另一个项目中配置。而写入日志的windows应用程序在其app.config中没有这样的log4net,但它仍然可以工作。我不希望在所有项目中都有log4net配置或引用log4net dll。我有一个单独的类库用于此目的,它将被共享。我希望通过这种方式实现。可能?启动WCF服务时,仅加载WCF服务的
app.config
。因此必须有
部分。
部分必须仅位于启动项目的
app.config
中。e、 g.您拥有库
lib1.dll
lib2.dll
、WCF服务
service.exe
和windows应用程序
app.exe
。所有四个都使用
log4net
。然后你需要
service.exe的
app.config
中的
log4net
部分和
app.exe的
app.config
中的
log4net
部分。如果我的Windows应用程序在app.config中没有log4net,我就无法获得它。可能是因为win app的输出为.exe?无论如何,我试着按照您的建议添加我的wcf服务库应用程序app.config。但还是不起作用!!!注意:它不是service.exe,而是service.dll。因为它是WCF服务库项目,而不是WCF服务应用程序项目。没有让你(“…在app.config中没有log4net的情况下完成…”)。启动exe时,log4net文件位于何处?您是否通过代码配置log4net?