c#包含日志输出的项目搭建
在工作过程中,我们总会碰到很多小型的功能点需要完成,以LZ自己的工作情况来举例,其中最频繁的是俩点
1、控制台项目
2、web界面(纯前台)
##控制台项目
我们首先来谈控制台项目的工作内容,在没有使用postMan[地址详见]()之前,工作中使用大量的接口调用,在项目准备阶段,首先要对接口的使用进行一个描述,在使用WebService和Wcf为主的服务接口为主的公司,使用Vs直接 <新建控制吧><添加服务引用>一套可视化的操作即可按接口通过代理类的方法进行引用,实在是c#开发的乐趣所在。
废话不多说,现在主要说说工作中常用的功能点
1、测试服务接口
2、编写windows服务
服务接口
控制台项目完成此功能很简单,本文章主要突出的是一些常用的方法。
在编写类项目的过程中,主要会用到三个类库
1.Newtonsoftjson(json序列化)
2.log4net(日志记录)
3.NUint(单元测试)
业务上无非就是调用接口测试,如果成功Pass,如果失败记录日志。
单元测试的目的主要是为了,批量使用接口,测试接口的并发和其他操作所用
Windows服务
windows服务的使用场景在我的工作中主要结合任务调度来来做,同时配合一些其他的技术,像是队列,缓存等
例子:
1、每隔10秒同步一次A数据库数据(SqlServer)至B数据库(Oracle),表名称,字段名称均不一样
2、每天凌晨2点跑一项或多项任务,成功失败均记录日志+推送管理员(手机短信、邮件、内部服务平台)
大体上都是结合任务调度来做的,进行任务调试的库一般选用的是Quartz.Net,console服务转Windows服务用的是topshelf,日志使用Log4net
通过这三个组件就能够满足我的一般需求,其他的功能点按要求要引用不同的类库。
##简单项目搭建
###项目搭建1.0
新建一个console 项目,运行环境选择.Net Framework 4.5
新建解决方案
>建立三个类库
Common 基础层
Models 实体层
ScheduleTasks 任务具体任务

首先引用Nuget包,不同的层引用不同的Nuget,再次简单说明
Common 基础层
>log4net、quartz.net
Models 实体层
>Sqlsugar
Schedules
>待定
进行不同的模块封装
####log4net 的引用和封装
log4Net不需要做太多的封装,提供一个初始化,一个日志接口获取方法即可
public class LogFactory
{
static LogFactory()
{
string path = AppDomain.CurrentDomain.BaseDirectory + @"/log4net.config";
FileInfo configFile=new FileInfo(path);
log4net.Config.XmlConfigurator.Configure();
}
public static ILog GetLogger(string name)
{
return LogManager.GetLogger(name);
}
public static ILog GetLogger(Type type)
{
return LogManager.GetLogger(type);
}
}
最简单的config日志配置
至此log4net的工作完成
Newtonsoftjson

版本随便你自己使用
在程序的编码过程中经常会用到json的序列化和么序列化
编写一个简单的help class
///
/// Json帮助类
///
public class JsonHelper
{
///
/// 将对象序列化为JSON格式
///
/// 对象
/// json字符串
public static string SerializeObject(object o)
{
string json = JsonConvert.SerializeObject(o);
return json;
}
///
/// 解析JSON字符串生成对象实体
///
/// 对象类型
/// json字符串(eg.{"ID":"112","Name":"石子儿"})
/// 对象实体
public static T DeserializeJsonToObject(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
}
///
/// 解析JSON数组生成对象实体集合
///
/// 对象类型
/// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])
/// 对象实体集合
public static List DeserializeJsonToList(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List));
List list = o as List;
return list;
}
///
/// 反序列化JSON到给定的匿名对象.
///
/// 匿名对象类型
/// json字符串
/// 匿名对象
/// 匿名对象
public static T DeserializeAnonymousType(string json, T anonymousTypeObject)
{
T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
return t;
}
}