记录日志好习惯——Log4net入门(WCF篇)
本篇是在学习了“编码之道”的Log4net入门(WCF篇)http://www.cnblogs.com/yonghuacui/p/6181864.html之后,总结了一些自认为比较重要的细节。顺便把创建和发布WCF服务的知识也一起巩固一下。
一、创建项目
1、在模板中选择【WCF服务应用程序】,输入项目名称“Log4netWCF”后,点击创建。
2、右键点击“Log4netWCF”项目中的“IService1.cs”文件,将其删除,再展开“Service1.svc”,将子项“Service1.svc.cs”删除。
3、在解决方案中【添加项目】,在模板中选择【WCF服务库】项目,输入项目名称“Log4netWcfServiceLibrary”后,点击创建。
4、在“Log4netWCF”项目中右键点击【引用】-【添加引用】-【项目】,勾选“Log4netWcfServiceLibrary”项目.
5、打开“Log4netWCF”项目的“Service1.svc”文件,修改其中的代码为:
<%@ ServiceHost Language="C#" Debug="true" Service="Log4netWcfServiceLibrary.Service1" CodeBehind="Service1.cs" %>
6、选择【生成解决方案】,没有报错的话,那我们的WCF服务就算是创建好了。
二、发布服务
1、右键点击“Log4netWCF”项目,选择【发布】。弹出如下对话框。

2、在【配置文件】选择【自定义】,输入配置文件名称“Log4netWCF”,这个随便取,好记就行,点击【下一步】。
3、在【连接】中“Publish method”选择“File System”,“Target location”点击后面的“...”,选择【文件系统】,选择一个合适的目录。我选择“F:\Log4netWCF”这个文件夹,点击【发布】。
三、在IIS创建网站
1、安装IIS的方法我就不细说了,网上一搜一大把,在【计算机管理】中选择【Internet Information Services(IIS)】-【网站】-【添加网站】。

2、“网站名称”填“Log4netWcfService”,“物理路径”选择刚刚发布WCF时选择的路径“F:\Log4netWCF”,“绑定”里“IP地址”填写“127.0.0.1”,“端口”填写“8081”(填一个没有使用的就行),点击确定。
3、点击右侧“浏览网站”,查看网页有没有报错,没报错的话WCF服务就算是发布成功了。
四、测试WCF服务
1、在解决方案里再添加一个测试用的项目,右键解决方案【添加】-【新建项目】,选择“控制台应用程序”,项目名称“Log4netWCFTest”。
2、在“Log4netWCFTest”项目中,右键点击【引用】-【添加服务引用】。

3、在地址栏输入刚刚发布的WCF服务的地址,后加svc文件的文件名,点击【转到】。服务栏出现了服务,说明已经检测到了WCF服务。然后在“命名空间”中输入名称“Log4netWcfService”,点击确定。
4、把“Log4netWCFTest”设置为启动项目。右键“Log4netWCFTest”项目,选择【设置为启动项目】。
5、在“Log4netWCFTest”项目的Program.cs文件中增加测试代码。
using System; namespace Log4netWCFTest
{
class Program
{
static void Main(string[] args)
{
Log4netWcfService.Service1Client client = new Log4netWcfService.Service1Client();
Console.WriteLine(client.GetData());
Console.ReadKey();
}
}
}
6、点击启动,查看结果。

7、输出结果为“You entered 5”,证明我们的服务是可以使用的。
五、使用Log4net记录日志
1、终于讲到正题了,在项目“Log4netWcfServiceLibrary”中,右键点击【引用】-【添加引用】。

2、选择【浏览】项,找到Log4net.dll,点击【确定】。
3、在“Log4netWCFServiceLibrary”项目中添加Log4net的配置文件。

4、因为找不到配置文件的类型,我这里文件类型就直接选择“类”,文件名称填写“Log4net.config”。
5、将添加的配置文件中的内容删除,添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web> <log4net>
<!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="C:\Logs\" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value=""WCFLogs_"yyyyMMdd".log"" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <root>
<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
<level value="ALL" />
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender-ref ref="RollingFileAppenderNameByDate" />
</root>
</log4net>
</configuration>
6、修改“Log4netWCFServiceLibrary”项目中的Service1.cs文件,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace Log4netWcfServiceLibrary
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
public class Service1 : IService1
{ private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public string GetData(int value)
{
log.Debug("这是deBug日志");
log.Info("这是Info日志");
log.Warn("这是Warn日志");
log.Error("这是Error日志");
log.Fatal("这是Fatal日志");
return string.Format("You entered: {0}", value);
} public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite == null)
{
throw new ArgumentNullException("composite");
}
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
}
7、在“Log4netWCFServiceLibrary”项目的AssemblyInfo.cs文件最后中添加一行:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
8、重新发布一次“Log4netWCF”项目。使用“Log4netWCFTest”项目测试下服务,接着就可以去日志路径查看日志了。日志路径配置在“Log4netWCF”项目的“Log4net.config”文件中,我这里配置的路径为“C:\Logs\”。

注:日志文件路径也可以使用相对路径,如:
<file value="logs\" />
日志会输出到发布WCF服务的路径下。
记录日志好习惯——Log4net入门(WCF篇)的更多相关文章
- Log4net入门(WCF篇)
在上一篇Log4net入门(ASP.NET MVC 5篇)中,我们讲述了如何在ASP.NET MVC 5项目中使用log4net.在这一篇中,我们将讲述如何在WCF应用中使用log4net,为了讲述这 ...
- Log4net入门(帮助类篇)
在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...
- Log4net入门(ASP.NET MVC 5篇)
在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...
- Log4net入门(SQL篇)
我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息. 首先,我们在SQL ...
- Log4net入门(日志文件篇)
在上一篇Log4net入门(控制台篇)中,我们将日志信息输出到控制台中,在这一篇中,我们将描述如何将日志信息写到文件中.要将日志信息写入文件非常简单,只需要在Log4net.config配置文件中添加 ...
- .NET日志记录之——log4net划重点篇
.NET日志记录之--log4net划重点篇 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不 ...
- 版本控制工具Git工具快速入门-Linux篇
版本控制工具Git工具快速入门-Linux篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.版本管理系统的介绍 1>.版本管理系统的特点 1.1>.自动生成备份: ...
- 关于WEB Service&WCF&WebApi实现身份验证之WCF篇(2)
因前段时间工作变动(换了新工作)及工作较忙暂时中断了该系列文章,今天难得有点空闲时间,就继续总结WCF身份验证的其它方法.前面总结了三种方法(详见:关于WEB Service&WCF& ...
- Asp.Net MVC2.0 Url 路由入门---实例篇
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
随机推荐
- SprngBoot对静态资源的映射
$.对前端js类库和框架的引用 使用webjars打包成jar的形式进行引用 webjars地址:https://www.webjars.org/; 选择使用版本-- > 选择管理方式--& ...
- HAOI2010 工厂选址
题目链接:戳我 数组开小火葬场qwqwq 就是一个贪心吧.对于一个数,我们知道只有两种摆放方式.所以我们可以先都放到新的里面,然后做一下新的-原先的差,按照差从大到小排序,依次提取数值减去即可. 代码 ...
- css中设置background属性
属性解释 background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个设置项: backgrou ...
- UIViewController读书笔记
当一个VC把另一个VC作为子view加到自己的view时,一定要先调用addChildViewController(_:)方法. 因为一个VC的root view,也就是VC的view只能被这个VC持 ...
- react的一些思考
在做好第一个需求之后,我接到了一个react写的产品,这让我异常的兴奋,终于能写react了 开始做的时候整体框架已经搭建好了,这让我有点小失落,我还以为我要开始搭框架了呢,没事,搭的也挺好的. 有了 ...
- 2016级算法第一次练习赛-B.朴素的中位数
朴素的中位数 题目链接:https://buaacoding.cn/problem/846/index 分析 题意很简单,就是给定了两个从小到大排好序的数组,找出这两个数组合起来的数据中的中位数. 方 ...
- [LnOI2019]加特林轮盘赌
Luogu5249 轮流开枪打一个环上的人 , 每次\(p\)的概率打死 , \(p\)始终相同 , 从第\(1\)个人开始 , 求第\(k\)个人成为唯一幸存者的概率 \(19.3.30\) 官方题 ...
- Laravel 控制器 Controller 传值到 视图 View 的几种方法总结
单个值的传递 with public function index() { $test = "测试"; return view('test.index')->with(' ...
- php中die(),exit(),return的区别
die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...
- 百度ECharts数据绑定诀窍
百度Echarts的功能还是蛮好用的.. 不能说多好但是也不次.. 下边就分享一些数据绑定经验..对在处理过程中的思路有一些帮助... 报表里用的最多的可以说是 饼状图和柱形图.. 饼状图里当然是包括 ...