第一步创建ApplicationLog类

代码:

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

namespace WeChat.Common
{
/// <summary>
/// 通过活动及页面级别
/// </summary>
public class ApplicationLog
{
/// <summary>
/// 写入错误日志
/// </summary>
/// <param name="message">日志内容</param>
public static void Write(string message)
{
Write(message, LogType.txt);
}

/// <summary>
/// 写入错误日志
/// </summary>
/// <param name="message">日志内容</param>
/// <param name="method">方法名称</param>
public static void Write(string message, string method)
{
Write(message + ",Method:" + method, LogType.txt);
}

/// <summary>
/// 写入错误日志
/// </summary>
/// <param name="description">错误异常的简单描述</param>
/// <param name="exceptionInfo">exception抛出的异常信息</param>
/// <param name="pageName">报错页面的名称</param>
/// <param name="methodName">报错方法的名称</param>
public static void Write(string description, string exceptionInfo, string pageName, string methodName)
{
Write(string.Format("{0}:{1},Page={2},Method={3}", description, exceptionInfo, pageName, methodName));
}

/// <summary>
/// 写入信息记录日志
/// </summary>
/// <param name="message">日志内容</param>
public static void WriteLog(string message)
{
Write(message, LogType.log);
}

/// <summary>
/// 写入信息记录日志
/// </summary>
/// <param name="message">日志内容</param>
/// <param name="method">方法名称</param>
public static void WriteLog(string message, string method)
{
Write(message + ",Method:" + method, LogType.log);
}

// 写入日志
private static void Write(string message, LogType fileType)
{
string folder = "";
try
{
folder = HttpContext.Current.Server.MapPath("~/Logs/");
}
catch (Exception ex)
{
folder = Path.Combine(HttpRuntime.AppDomainAppPath,"Logs\\");
}
string file = string.Format("{0}{1}.{2}", folder, DateTime.Now.ToString("yyyyMMdd"), fileType);
if (HttpContext.Current != null)
{
message = string.Format("[{0}][{1}][{2}]:{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), HttpContext.Current.Request.Url.LocalPath, HttpContext.Current.Request.UserHostAddress, message);
}
else
{
message = string.Format("[{0}]:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);
}
try
{
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}

StreamWriter sw;

if (!File.Exists(file))
{
sw = File.CreateText(file);
sw.Close();
}

sw = new StreamWriter(file, true, Encoding.Default);
lock (sw)
{
sw.WriteLine(message);
sw.Close();
}
}
catch (Exception ex)
{
if (HttpContext.Current != null)
{
HttpContext.Current.Response.Write(string.Format("log write error, ex={0}。", ex.Message));
HttpContext.Current.Response.End();
}
}
}

//日志类型
private enum LogType
{
txt = 0,
log = 1
}

}

}

第三步:

调用方法:

第四步:

最终创建log文件的log.txt文本内容

写入Log错误日志的更多相关文章

  1. Log错误日志级别

    日志记录器(Logger)的级别顺序:     分为OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL或者您定义的级别.Log4j建议只使用四个级别,优先级 从高到低分别是 ERR ...

  2. SQL Server代理(5/12):理解SQL代理错误日志

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 如我们在这个系列的前几篇文章所见,SQL ...

  3. 第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  4. mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)

    一. mysql错误日志:错误日志记录的事件:a).服务器启动关闭过程中的信息b).服务器运行过程中的错误信息c).事件调试器运行一个事件时间生的信息d).在从服务器上启动从服务器进程时产生的信息lo ...

  5. MySQL-五种日志(查询日志、慢查询日志、更新日志、二进制日志、错误日志)、备份及主从复制配置

    开启查询日志: 配置文件my.cnf: log=/usr/local/mysql/var/log.log 开启慢查询: 配置文件my.cnf: log-slow-queries=/usr/local/ ...

  6. 【译】第五篇 SQL Server代理理解代理错误日志

    本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到 ...

  7. .Net Core中间件和过滤器实现错误日志记录

    1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件. 每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下 ...

  8. [PHP] PHP在CLI环境下的错误日志

    1.display_errors = Off;//控制php是否输出错误;在生产环境中输出会泄露敏感信息;建议记录错误而不是将它们发送到STDOUToff :不显示任何错误;stderr :向STDE ...

  9. MySQL 错误日志(Error Log)

    同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件.通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等. 这些日志能够帮助我们定位mysqld ...

随机推荐

  1. PHP算法之斐波那契数列(递归)

    /*斐波那契数列 源代码分析 f(x) = 1 ; 当 x < 2 ; f(x) = f(x-1)+f(x-2); 当 x >= 2 ; 通项式为:fn ={((1+根号5)/2)^n-( ...

  2. Python Matplotlib.pyplot plt 中文显示

    话不多说,上代码 # -*- coding: UTF-8 -*- import matplotlib.pyplot as plt from matplotlib.font_manager import ...

  3. Python内置函数(65)——type

    英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...

  4. redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系

    一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串.链表(双端链表).字典.跳跃表. 整数集合.压缩列表(后面再了解).Redis没有直接使用这些数据结构来实现键值 ...

  5. WinSocket同时接入量的疑惑(求解...)

    在写TCP应用的时候一般都通过Accept来接入连接的接入,但对于Socket来说这个Accept同时能处理多大的量一般都没有明确说明,在应用中主要根据自己的需要设置Listen的队列数量.那List ...

  6. SVN就是这么简单

    什么是SVN SVN全称:Subversion,是一个开放源代码的版本控制系统 Svn是一种集中式文件版本管理系统.集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码, ...

  7. man帮助文档打印

    这里不讨论大家都知道的man重定向的一般常用方法(col处理方法)$ man find | col -b > man_fine.txt [跟着我的思路走]假如您像我一样,直接使用如下命令导出fi ...

  8. Docker Compose 简介

    Compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用.使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建 ...

  9. 痞子衡嵌入式:史上最强ARM Cortex-M学习资源汇总(持续更新中...)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M学习资源. 类别 资源 版本 短评 官方汇总 cortex-m-resources / ARM公司专家Josep ...

  10. 实时显示数据 SignalR 及时消息提醒( 立即向其推送内容)

    实时显示数据  SignalR 及时消息提醒( 立即向其推送内容) http://www.cnblogs.com/Leo_wl/p/5634910.html  <!--Reference the ...