首先抱歉我的英语不好) 我已经阅读了很多关于log4net loggining的文章,但不幸的是我的问题还没有解决...... 我在IIS托管的WCF服务中通过log4net进行日志记录存在问题。
重要代码的某些部分
我的服务代码部分:
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)我的Service.dll lib和Service.config位于C:\ inetpub \ wwwroot \ bin中。它正常吗?
请帮我解决这个问题。 我正在尝试超过10种其他变量的loggining。所有这些都在WindowsForms应用程序中工作,但不在IIS中托管的服务中工作。 附加信息:当我在服务中调用方法NAME时?我尝试通过File.Create在当前目录中写入文件并且它的工作,但是没有创建loggining文件,我不知道如何解决它。 感谢大家尝试理解我的英语并寻求帮助。)
或者如果您已经或者可以使用log4net创建原始的工作WCF服务,可以通过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";
}
}
}
然后我从visual studio我的服务发布到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>
现在我创建用于检查服务的测试控制台应用程序。我向控制台app添加服务引用并编写代码
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文件中? 如何添加log4net登录服务? 我尝试了很多样品,但它不起作用。 谢谢你的答案。 谢谢。
答案 0 :(得分:3)
您需要初始化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文件。