C# 简单日志文本输出

第一种  直接文件IO流写日志文件

using System.IO;
public static void WriteLog(string strLog)
{
  string sFilePath="d:\\"+DateTime.Now.ToString("yyyyMM");
  string sFileName = "rizhi" + DateTime.Now.ToString("dd") + ".log";
  sFileName = sFilePath+ "\\"+sFileName; //文件的绝对路径
  if (!Directory.Exists(sFilePath))//验证路径是否存在
  {
    Directory.CreateDirectory(sFilePath);
    //不存在则创建
  }
  FileStream fs;      
  StreamWriter sw;
  if (File.Exists(sFileName))
  //验证文件是否存在,有则追加,无则创建
  {
    fs = new FileStream(sFileName, FileMode.Append, FileAccess.Write);
  }
  else
  {
    fs = new FileStream(sFileName, FileMode.Create, FileAccess.Write);
  }
  sw = new StreamWriter(fs);
  sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "   ---   " + strLog);
  sw.Close();
  fs.Close();    
}

第二种 使用log4net类库输出日志

  1.下载log4net类库 并选择项目对应的框架版本

   下载地址:http://logging.apache.org/log4net/download_log4net.cgi

  2.添加log4net引用,创建LogHelper类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using log4net.Core;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace BoilerDashboard.Common
{
    public  class LogHelper
    {
        /// <summary>
        /// 输出日志到Log4Net
        /// </summary>
        /// <param name="t"></param>
        /// <param name="ex"></param>
        #region static void WriteLog(Type t, Exception ex)

        public static void WriteLog(Type t, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error("Error", ex);
        }

        #endregion

        /// <summary>
        /// 输出日志到Log4Net
        /// </summary>
        /// <param name="t"></param>
        /// <param name="msg"></param>
        #region static void WriteLog(Type t, string msg)

        public static void WriteLog(Type t, string msg)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error(msg);
        }

        #endregion


        
    }
}

第三种 Microsoft Enterprise Library里面的Log功能

    以VS2012里面建立的一个控制台程序为例

  1. 安装Microsoft Enterprise Library里面的Logging Application模块。
  在需要使用Log功能的项目上面右键,选择Manage NuGet Packeages...
  2. 在Manage NuGet Packeages窗口里面找到Enterprise Library - Logging Application Block,然后安装
  安装成功以后,项目引用中会增加两个新的引用。

  3. 我们需要对App.config文件进行配置。在这里我们使用配置编辑工具:Microsoft.Practices.EnterpriseLibrary.ConfigConsoleV6.vsix。这个工具的下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=38789

  4. 配置App.config文件。右键App.config文件选择Edit configuration file v6,打开配置工具窗口。
  5. 选择菜单命令Block -> Add Logging Settings
  6. 在Logging Target Listeners里面点加号按钮,然后选择Add Rolling Flat File Trace Listener(生成可以进行自动分割的文本文件)。
  7. 一般需要设置的参数有:Asynchronous(选true则进行异步log), File Exist Behavior(选), File Name, Formatter Name, Max Archived Files, Roll Interval, Roll Size KB。
  其中Formatter Name的值从Log Message Formatters中生成的值中选取。

  8. 生成 Message Format。在Log Message Formatters中点击加号按钮,选择Add Text Formatter
  点击Template右侧的...按钮,打开Template Editor对话框,对Template的内容进行编辑
  编辑后在App.config中生成的xml代码如下:
  Logging formatter
  9. 在窗口左侧区域中点击Cotegories右边的加号按钮。生成一个新的Category
  10. 在新生成的Category区域中修改Name属性,然后点击Listeners右边的加号按钮,选择在Logging Target Listeners区域中已经生成的Listener。
  11. 对已经进行的设置保
  12. 写个简单的测试程序看看生成的Log效果如何

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Phoenix的Android之旅

JSONObject 和 JsonObject 的区别

做Java开发经常要用Json来做数据的格式化解析,虽然在Android平台上我们习惯的使用 JSONObject, 但不知道你有没有这样的疑问,我们在impo...

31010
来自专栏听雨堂

用Nunit测试通讯程序

    对于Nunit,我是个纯粹的新手,没想到,第一个练手的,居然是一个通讯程序。难度略微大了点。我的通讯程序是一个类似通讯服务器的程序,能够监听和维持多个连...

21070
来自专栏大内老A

谈谈分布式事务之三: System.Transactions事务详解[上篇]

在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务。.NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在Sy...

23680
来自专栏技术博客

菜菜从零学习WCF九(会话、实例化和并发)

在服务协定上设置System.ServiceModel.ServiceContractAttribute.SessionMode值

12030
来自专栏大内老A

WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务

在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式...

23090
来自专栏施炯的IoT开发专栏

windows mobile窗口之间传递数据的方法

    在windows mobile上设计UI的时候,经常会碰到多个窗口的情况。有时候,我们需要将一个窗口中的用户输入信息反应到另一个窗口中去,这就涉及到窗口...

21190
来自专栏Ken的杂谈

C# MD5加密-MD5Helper

4K30
来自专栏开发 & 算法杂谈

Hiredis源码阅读(二)

上一篇介绍了Hiredis中的同步api以及回复解析api,这里紧接着介绍异步api。异步api需要与事件库(libevent、libev、ae一起工作)。

52450
来自专栏刘望舒

Android网络编程(二)HttpClient与HttpURLConnection

相关文章 Android网络编程(一)HTTP协议原理 前言 上一篇我们了解了HTTP协议原理,这一篇我们来讲讲Apache的HttpClient和Java的...

22670
来自专栏葡萄城控件技术团队

ASP.NET 5系列教程(七)完结篇-解读代码

在本文中,我们将一起查看TodoController 类代码。 [Route] 属性定义了Controller的URL 模板: [Route("api/[con...

23250

扫码关注云+社区

领取腾讯云代金券