博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4net使用(一)
阅读量:5284 次
发布时间:2019-06-14

本文共 13073 字,大约阅读时间需要 43 分钟。

日志记录到根目录Log文件夹,文件夹中分LogError与LogInfo文件夹

web.config配置:

在mvc过滤器中记录异常信息

public void OnException(ExceptionContext filterContext)        {            lock (obj)            {                var httpContext = filterContext.RequestContext.HttpContext.Request;                // 在出现未处理的错误时运行的代码                if (!httpContext.Url.ToString().Contains("."))                {                    string logText = "\r\n-------------  异常信息   ---------------------------------------------------------------";                    logText += "\r\n发生时间:" + DateTime.Now.ToString();                    logText += "\r\n发生异常页:" + httpContext.Url.ToString();                    logText += "\r\n异常信息:" + filterContext.Exception.Message;                    logText += "\r\n错误源:" + filterContext.Exception.Source;                    logText += "\r\n堆栈信息:" + filterContext.Exception.StackTrace;                    logText += "\r\n-----------------------------------------------------------------------------------------\r\n";                    //日志物理路径                    string path = httpContext.MapPath("~/Log/");                    WebLog.WriteLog(logText, path);                    filterContext.RequestContext.HttpContext.Server.ClearError();                                        //filterContext.RequestContext.HttpContext.Response.Redirect("/Home/Error");                }            }        }

Global.asax.cs,设置

public class MvcApplication : System.Web.HttpApplication    {        public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {            filters.Add(new HandleErrorAttribute());        }        public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            routes.MapRoute(                "Default", // Route name                "{controller}/{action}/{id}", // URL with parameters                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults            );        }        protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            RegisterGlobalFilters(GlobalFilters.Filters);            RegisterRoutes(RouteTable.Routes);            //配置日志,读取配置信息            LogHelper.SetConfig();        }        protected void Application_Error(Object sender, EventArgs e)        {            //记录错误日志            Exception objExp = HttpContext.Current.Server.GetLastError();            LogHelper.WriteLog("\r\n客户机IP:" + Request.UserHostAddress + "\r\n错误地址:" + Request.Url + "\r\n异常信息:" + Server.GetLastError().Message, objExp);        }    }

LogHelper.cs设置

public  class LogHelper    {        public  LogHelper()        {                    }        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");   //选择
的配置 public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); //选择
的配置 public static void SetConfig() { log4net.Config.XmlConfigurator.Configure(); } ///
/// 设置文件路径 /// ///
public static void SetConfig(FileInfo configFile) { log4net.Config.XmlConfigurator.Configure(configFile); } ///
/// 写系统信息日志 /// ///
public static void WriteLog(string info) { if (loginfo.IsInfoEnabled) { loginfo.Info(info); } } ///
/// 写错误日志 /// ///
///
public static void WriteLog(string Error, Exception se) { if (logerror.IsErrorEnabled) { logerror.Error(Error, se); } } }

LogError 记录效果:

客户机IP:::1错误地址:http://localhost:8134/Admin/Scripts/js/ligerui.expand.js异常信息:未找到路径“/Admin/Scripts/js/ligerui.expand.js”的控制器或该控制器未实现 IController。  System.Web.HttpException (0x80004005): 未找到路径“/Admin/Scripts/js/ligerui.expand.js”的控制器或该控制器未实现 IController。   在 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)   在 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)   在 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)   在 System.Web.Mvc.MvcHandler.<>c__DisplayClass6.
b__2() 在 System.Web.Mvc.SecurityUtil.<>c__DisplayClassb`1.
b__a() 在 System.Web.Mvc.SecurityUtil.
b__0(Action f) 在 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) 在 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func) 在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 在 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) 在 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

LogInfo记录效果:

客户机IP:::1错误地址:http://localhost:8134/Admin/Department/GetDeptGridTree异常信息:可为空的对象必须具有一个值。 System.InvalidOperationException: 可为空的对象必须具有一个值。   在 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)   在 System.Nullable`1.get_Value()省略异常描述···

 也可独立出配置文件:

using System;using System.Collections.Generic;using System.ComponentModel;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PrintService.Helper{    public enum LogCategory    {        [Description("调试")]        Debug,        [Description("信息")]        Info,        [Description("警告")]        Warn,        [Description("错误")]        Error,        [Description("过错")]        Fault    }    public class LogHelper    {        private static readonly log4net.ILog infoLogger = log4net.LogManager.GetLogger("loginfo");     //选择
的配置 private static readonly log4net.ILog errorLogger = log4net.LogManager.GetLogger("logerror"); //选择
的配置 private static readonly log4net.ILog warnLogger = log4net.LogManager.GetLogger("logwarn"); //选择
的配置 private static readonly log4net.ILog debugLogger = log4net.LogManager.GetLogger("logdebug"); //选择
的配置 static LogHelper() { string configPath = Path.Combine(PathHelper.ConfigDir, "LogServiceConfig.xml"); if (!File.Exists(configPath)) { throw new FileNotFoundException("找不到日志服务配置文件!"); } log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configPath)); } ///
/// 记录log信息到文件中 /// ///
需要记录的信息 ///
log类型 ///
异常信息 public static void Log(string message, LogCategory category, Exception exception = null) { try { switch (category) { case LogCategory.Debug: { debugLogger.Debug(message); break; } case LogCategory.Info: { infoLogger.Info(message); break; } case LogCategory.Warn: { if (null == exception) { warnLogger.Warn(message); } else { warnLogger.Warn(message, exception); } break; } case LogCategory.Error: { if (null == exception) { errorLogger.Error(message); } else { errorLogger.Error(message, exception); } break; } } } catch (Exception ex) { throw; } } ///
/// 写基本信息日志 /// ///
public static void Log(string mesage) { Log(mesage, LogCategory.Info, null); } ///
/// 出错信息日志 /// ///
public static void Log(Exception exception) { Log("error message:", LogCategory.Error, exception); } }}using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace PrintService.Helper{ ///
/// 路径管理类 /// public class PathHelper { private static string _appDir; private static string _binDir; private static string _configDir; private static string _dataDir; static PathHelper() { //网站与后台服务路径不同,网站需要上翻一级;后台服务则不需要;通过判断使用的配置文件是否是web.config来判断是网站,还是服务。 bool isWeb = false; var appDomain = AppDomain.CurrentDomain; if (appDomain != null) { var startInfo = appDomain.SetupInformation; if (startInfo != null) { if (startInfo.ConfigurationFile != null) { if (startInfo.ConfigurationFile.EndsWith("web.config", StringComparison.OrdinalIgnoreCase)) { isWeb = true; //配置文件是网站 } } } } _appDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Substring(8))); //获取此处配置文件在程序目录 //_appDir = _appDir.Substring(0, _appDir.Length - 4); if (isWeb) { _appDir = _appDir.Substring(0, _appDir.LastIndexOf("\\", StringComparison.Ordinal)); // LastIndexOf("\\") => LastIndexOf(@"\"),向上翻一级 } _binDir = Path.Combine(_appDir, "bin\\"); //合并目录 _configDir = Path.Combine(_appDir, "Config\\"); _dataDir = Path.Combine(_appDir, "App_Data\\"); } #region 公共目录 ///
/// 应用程序所在的目录 /// public static string AppDir { get { return _appDir; } } ///
/// Bin文件所在的目录 /// public static string BinDir { get { return _binDir; } } ///
/// 根目录中的Cinfig文件夹 /// public static string ConfigDir { get { return _configDir; } } ///
/// 根目录中的App_Data文件夹 /// public static string DataDir { get { return _dataDir; } } #endregion }}配置文件:
LogHelper.Log("测试Error!", LogCategory.Error);

 

log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

Log4net框架定义了一个ILog接口,所有的logger类都必须实现这个接口。如果你想实现一个自定义的logger,你必须首先实现这个接口。你可以参考在/extension目录下的几个例子。

log4net.Layout.PatternLayout中的转换模式(ConversionPattern)

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

%c(class):当前日志对象的名称,例如:

       模式字符串为:%-10c -%m%n

       代码为:

ILog log=LogManager.GetLogger(“Exam.Log”);

log.Debug(“Hello”);

    则输出为下面的形式:

Exam.Log       - Hello

%L:输出语句所在的行号

%F:输出语句所在的文件名

%-数字:表示该项的最小长度,如果不够,则用空格填充

 

Logger

作用:直接与应用交互的组件,用于触发日志事件

级别(日志事件) 优先级

OFF                    6
FATAL       5
ERROR      4
WARN        3
INFO          2
DEBUG       1
ALL            0

 

其他参考

http://www.cnblogs.com/zhangchenliang/p/4546352.html

 

转载于:https://www.cnblogs.com/shy1766IT/p/5384762.html

你可能感兴趣的文章
实例3 指针操作符
查看>>
程序员们都是不被世人所理解的真正天才吗?-请大家看这个数独的解法
查看>>
关于ready和load方法作用于不同情况下的比较
查看>>
Eclipse环境下配置Appium需要的jar包
查看>>
第一个Verilog程序:通用加法器
查看>>
HTML 之 文本样式
查看>>
leetcode----------Single Number
查看>>
事件的委托处理(Event Delegation)
查看>>
Kubernetes学习之路(九)之kubernetes命令式快速创建应用
查看>>
数据库基础知识汇总
查看>>
vue 图片懒加载
查看>>
Java基础5:抽象类和接口
查看>>
SRM589
查看>>
geoserver笔记
查看>>
Java 程序检查远程服务器状态
查看>>
StringBuffer 和 StringBuilder
查看>>
java synchronized详解
查看>>
软件体系结构与设计实验一
查看>>
今天看了孚日助学金情况
查看>>
MySQL表的几个简单查询语句
查看>>