• 生成Log日志文件.NET


    首先创建一个log4net.config的文件,在文件里面设置如下:

    View Code
    <?xml version="1.0" encoding="utf-8"?>
    
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
      </configSections>
      <log4net>
    
        <logger name="LogSystem">
          <level value="ALL"/>
          <!--<appender-ref ref="AdoNetAppender_SqlServer" />-->
          <appender-ref ref="rollingFile" />
        </logger>
    
        <!--<root>
                <level value="OFF"/>
                <appender-ref ref="AdoNetAppender_SqlServer"/>
            </root>-->
    
        <!--记录到文件方式-->
        <appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--Log/文件夹下面的 以时间命名的文件 -->
          <param name="File" type="" value="Log/" />
          <param name="AppendToFile" value="true" />
          <param name="RollingStyle" value="Date" />
          <param name="DatePattern" value="yyyyMMdd'.txt'" />
          <param name="StaticLogFileName" value="false" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} | [%t] | %-5p | %c | %m%n" />
          </layout>
        </appender>
        <!--记录到sqlserver数据库方式-->
        <!--<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
                <buffersize value="1" />
                <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
                 <connectionString value="server=192.168.0.181;database=TopSystem;uid=TOPUSER;pwd=TOPSYS2010;"/>
                <commandText value="INSERT INTO SysLog ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)"/>
                <parameter>
                    <parameterName value="@log_date"/>
                    <dbType value="DateTime"/>
                    <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}"/>
                </parameter>
                <parameter>
                    <parameterName value="@thread"/>
                    <dbType value="String"/>
                    <size value="255"/>
                    <layout type="log4net.Layout.PatternLayout" value="%thread"/>
                </parameter>
                <parameter>
                    <parameterName value="@log_level"/>
                    <dbType value="String"/>
                    <size value="50"/>
                    <layout type="log4net.Layout.PatternLayout" value="%level"/>
                </parameter>
                <parameter>
                    <parameterName value="@logger"/>
                    <dbType value="String"/>
                    <size value="255"/>
                    <layout type="log4net.Layout.PatternLayout" value="%logger"/>
                </parameter>
                <parameter>
                    <parameterName value="@message"/>
                    <dbType value="String"/>
                    <size value="4000"/>
                    <layout type="log4net.Layout.PatternLayout" value="%message"/>
                </parameter>
            </appender>-->
      </log4net>
    </configuration>

    在web.config配置:

    <appSettings>
    <!-- 作业调度配置 -->
    <add key="cronExpr" value="00 18 16 ? * *"/>
    </appSettings>

    在global.asax配置如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.Configuration;
    
    namespace Webcode
    {
        public class Global : System.Web.HttpApplication
        {
            Quartz.IScheduler sched;
            protected void Application_Start(object sender, EventArgs e)
            {
                ComLib.LogLib.Log4NetBase.Log("程序启动");
                //在应用程序启动时运行的代码
                Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
                sched = sf.GetScheduler();
                Quartz.JobDetail job = new Quartz.JobDetail("daily", "dailygroup", typeof(Webcode.BussniesLogic.Service.QuartzJobService));
                string cronExpr = ConfigurationManager.AppSettings["cronExpr"];
                Quartz.CronTrigger trigger = new Quartz.CronTrigger("daily_trigger", "dailygroup", "daily", "dailygroup", cronExpr);
                sched.AddJob(job, true);
                DateTime ft = sched.ScheduleJob(trigger);
                sched.Start();
                ComLib.LogLib.Log4NetBase.Log("程序启动结束");
            }
    
            protected void Session_Start(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_BeginRequest(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_AuthenticateRequest(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_Error(object sender, EventArgs e)
            {
                
            }
    
            protected void Session_End(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_End(object sender, EventArgs e)
            {
    
            }
        }
    }

    本人不喜欢LOG文件记录太多没必要的信息,如果需要每次都记录可以在Application_Error里面添加:

    View Code
     protected void Application_Error(object sender, EventArgs e)
    {
    Exception ex = Server.GetLastError().GetBaseException();
    
             if (ex != null)
            {
                 ComLib.LogLib.Log4NetBase.Log(string.Format(@"错误的信息{0}--出错的方法名{1}--
                   出错的类名{2}", ex.Message, ex.TargetSite.Name, ex.TargetSite.DeclaringType.FullName));
               }
                // 清空最后的错误
              Server.ClearError();
               Response.Redirect("/operate/error.htm");
    }
    View Code
    public class QuartzJobService : IJob
        {
            #region IJob Members
    
            public void Execute(JobExecutionContext context)
            {
                ComLib.LogLib.Log4NetBase.Log("Job开始:" + DateTime.Now);
                DbSession.Default.FromProc("Report_Daily_Job").Execute();
                ComLib.LogLib.Log4NetBase.Log("JobReport_Daily_Job:" + DateTime.Now);
                DbSession.Default.FromProc("Report_Daily_TSL").Execute();
                ComLib.LogLib.Log4NetBase.Log("JobReport_Daily_TSL:" + DateTime.Now);
                DbSession.Default.FromProc("Report_Daily_ShortKey_TSL").Execute();
                ComLib.LogLib.Log4NetBase.Log("JobReport_Daily_ShortKey_TSL:" + DateTime.Now);
            }
    
            #endregion
        }

    QuartzJobService.cs的代码如上

    LOG4NETBASE.cs的代码如下

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace ComLib.LogLib
    {
       public class Log4NetBase
        {
    
           //TODO:现在还没考虑多log模块 所有关于LOG的都依赖LOG4NET
           /// <summary>
           /// 
           /// </summary>
           /// <param name="level">级别</param>
           /// <param name="UserName">所属用户 默认admin</param>
           /// <param name="StrAction">需要输出的信息</param>
           /// <param name="ex"></param>
            public static void Log(LogLevel level, string UserName, string StrAction, System.Exception ex)
            {
    
    
                LogEvent logevent = new LogEvent();
                logevent.Level = level;
                logevent.Message = StrAction;
                logevent.Ex = ex;
                logevent.Computer = System.Environment.MachineName;
                logevent.CreateTime = DateTime.Now;
                logevent.ThreadName = System.Threading.Thread.CurrentThread.Name;
                logevent.UserName = string.IsNullOrEmpty(UserName)?"admin":UserName;
                logevent.FinalMessage = LogFormatter.Format(null, logevent);
    
           
    
                switch (level)
                {
                    case LogLevel.fatal:
                        LogBLL.fatal(logevent.FinalMessage);
                        break;
                    case LogLevel.error:
                        LogBLL.error(logevent.FinalMessage);
                        break;
                    case LogLevel.warn:
                        LogBLL.warn(logevent.FinalMessage);
                        break;
                    case LogLevel.info:
                        LogBLL.info(logevent.FinalMessage);
                        break;
                    case LogLevel.debug:
                        LogBLL.debug(logevent.FinalMessage);
                        break;
                    default:
                        LogBLL.info(logevent.FinalMessage);
                        break;
                }
    
               
    
            }
            public static void Log(string StrAction, System.Exception ex) {
                Log(LogLevel.warn, "", StrAction, ex);
            }
    
            public static void Log(string StrAction)
            {
                Log(LogLevel.warn, "", StrAction, null);
            }
            public static void Log(System.Exception ex)
            {
                Log(LogLevel.warn, "", "系统错误", ex);
            }
            public static void LogWithDebugView(string StrAction, System.Exception ex) {
                if (ex != null)
                {
                    Log(LogLevel.warn, "", StrAction, ex);
                    Debug.DebugView.PrintDebug(StrAction, ex.Message);
                }
                else {
                    Log(StrAction);
                    Debug.DebugView.PrintDebug(StrAction);
                }
            }
            public static void LogWithDebugView(string StrAction)
            {
                LogWithDebugView(StrAction, null);
            }
        }
    
       /// <summary>
       /// Log formatter.
       /// </summary>
       public class LogFormatter
       {
           /// <summary>
           /// Quick formatter that toggles between delimited and xml.
           /// </summary>
           /// <param name="formatter"></param>
           /// <param name="logEvent"></param>
           public static string Format(string formatter, LogEvent logEvent)
           {
               if (string.IsNullOrEmpty(formatter))
                   return Format(logEvent);
    
               if (formatter.ToLower().Trim() == "xml")
                   return FormatXml(logEvent);
    
               return Format(logEvent);
           }
    
    
           /// <summary>
           /// Builds the log message using message and arguments.
           /// </summary>
           /// <param name="message">The message.</param>
           /// <param name="args">The args.</param>
           /// <returns></returns>
           public static string Format(LogEvent logEvent)
           {
               // Build a delimited string
               // <time>:<thread>:<level>:<message>
               StringBuilder line = new StringBuilder();
               if (!string.IsNullOrEmpty(logEvent.ThreadName))
                   line.Append(logEvent.ThreadName+" | ");
               line.Append(logEvent.Level.ToString() + " | ");
               line.Append(logEvent.Message + " | ");
               line.Append(logEvent.Ex == null ? "无异常描述" : logEvent.Ex.Message);
               return line.ToString();
           }
    
    
           /// <summary>
           /// Builds the log message using message and arguments.
           /// </summary>
           /// <param name="message">The message.</param>
           /// <param name="args">The args.</param>
           /// <returns></returns>
           public static string FormatXml(LogEvent logEvent)
           {
               // Build a delimited string
               // <time>:<thread>:<level>:<loggername>:<message>
               string line = string.Format("<time>{0}</time>", logEvent.CreateTime.ToString());
               if (!string.IsNullOrEmpty(logEvent.ThreadName)) line += string.Format("<thread>{0}</thread>", logEvent.ThreadName);
               line += string.Format("<level>{0}</level>", logEvent.Level.ToString());
               line += string.Format("<message>{0}</message>", logEvent.Message);
               return line;
           }
       }
    }

    由于本人所用的框架限制不能黏贴太多代码,也是新手一枚,如果需要帮助请留言~欢迎大家批评共同进步

  • 相关阅读:
    网站运维之 优化
    网站运维之 风险防控
    网站运维之 使用IIS日志分析器1.03.exe进行IIS服务器日志分析
    MySQL数据库优化
    深入理解Java GC
    深入理解React虚拟DOM
    深入理解new String()
    深入理解JVM内存模型
    MySQL的四种事务隔离级别
    Node.js Stream(流)
  • 原文地址:https://www.cnblogs.com/double2012/p/2611432.html
Copyright © 2020-2023  润新知