log4net в WCF, размещенный на IIS 7.5 без записи файла журнала - PullRequest
0 голосов
/ 22 октября 2011

Прежде всего простите за мой плохой английский) Я прочитал много статей о регистрации log4net, но, к сожалению, моя проблема еще не решена ... У меня проблема с входом в систему через log4net в службах WCF, размещенных в IIS.

некоторые части важного кода

части моего сервисного кода:

using System;
    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    namespace Service
    {
        [ServiceBehavior]
        public class MyService : IService
        {
            private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

часть метода обслуживания

public string Name()
        {
            log.Info("return name ");
            return "NAME";
        }

это мой конфигурационный файл для сервиса для log4net

?xml version="1.0"?>
<configuration>
  <!-- Register a section handler for the log4net section -->
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <appSettings>
    <!-- To enable internal log4net logging specify the following appSettings key -->
    <!-- <add key="log4net.Internal.Debug" value="true"/> -->
  </appSettings>
  <!-- This section contains the log4net configuration settings -->
  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <file value="log-file.txt"/>
      <appendToFile value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] ID=%property{EventID} - %message%newline" />
      </layout>
    </appender>
    <!-- Define some output appenders -->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] ID=%property{EventID} - %message%newline" />
      </layout>
    </appender>
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

crossdomain.xml
clientaccesspolicy.xml 
Service.svc

файлы настроены и присутствуют в каталоге C: \ Inetpub \ Wwwroot и мой сервис работает успешно, но журнал не пишет ...

Вопрос: 1) где должен находиться конфигурационный файл Service.config с конфигурацией log4net? 2) моя библиотека lib.dll и Service.config находится в C: \ inetpub \ wwwroot \ bin. Это нормально?

Пожалуйста, помогите мне решить эту проблему. Я пробую более 10 различных вариантов входа. Все они работают в приложении WindowsForms, но не работают в службе, размещенной в IIS. Дополнительная информация: когда я вызываю метод NAME в сервисе? Я пытаюсь записать файл в текущий каталог через File.Create, и он работает, но файл регистрации не создается, и я не знаю, как его решить. Спасибо всем за понимание моего английского и за помощь.)

или если у вас есть или вы можете создать примитивную рабочую службу WCF с регистрацией в log4net, которая может быть опубликована через IIS, напишите в этом ответе пример кода для моего тестирования в моей среде.

Большое спасибо.

Привет. Спасибо за ответ. Сейчас я пытаюсь описать мою ситуацию в деталях для получения дополнительной информации Первый шаг: я создаю новый проект. Тип проекта - сервисная библиотека WCF. Мой код интерфейса для сервиса

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace MyService
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        string ReturnName();
    }
}

Мой класс обслуживания

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyService
{
    public class MyService:IMyService
    {
        public string ReturnName()
        {
            return "Return name";
        }
    }
}

Затем из визуальной студии я публикую свой сервис для IIS. как результат - новые файлы сервиса в каталоге сайта (http://img854.imageshack.us/img854/456/62137541.png)

web.config file for this service is
<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="MyService.MyService">
        <endpoint address="" binding="wsHttpBinding" contract="MyService.IMyService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/MyService/Service1/"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

Теперь я создаю тестовое консольное приложение для проверки сервиса. Я добавляю сервисную ссылку в консольное приложение и пишу код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TestWCFLog.ServiceReference1;

namespace TestWCFLog
{
    class Program
    {
        static void Main(string[] args)
        {
            MyServiceClient service = new MyServiceClient();
            Console.WriteLine( service.ReturnName());
            Console.ReadLine();
        }
    }
}

И это работа. (http://img836.imageshack.us/img836/1718/52151311.png) Теперь скажите, пожалуйста, что я должен добавить к своему сервисному коду и к файлу web.config? Как я могу добавить логинтинг для сервиса? Я пробую много образцов, но это не работает. Спасибо за ответ. Спасибо.

1 Ответ

3 голосов
/ 22 октября 2011

Вам нужно инициализировать log4net, и, поскольку вы используете IIS, вы можете сделать это в своем файле Global.asax (добавьте новый в свой проект, если у вас его еще нет).

Он должен что-то прочитатькак это:

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        XmlConfigurator.Configure();

        var logger = LogManager.GetLogger(typeof(Global));

        logger.Info("Starting up services");
    }
}

Я также вижу в вашем конфигурационном файле, что вы используете устаревший IgnoreSectionHandler.измените ваш файл конфигурации следующим образом:

<configSections>
    <section name="log4net"
      type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

ваш файл конфигурации должен называться web.config и должен находиться в папке вашего хоста службы, а не в папке bin, в вашем случае c: \ inetpub \ wwwroot.

Не уверен, что вы подразумеваете под service.config.При размещении служб под IIS вся конфигурация помещается в файл web.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...