log4net插入access自定义字段

1.创建表格

2.创建log4net.xml,并设置属性始终复制,关键属性

 <bufferSize value="1" />
 <conversionPattern value="%property{usernm}" />

|DataDirectory| 如果是winform,在项目下加个文件夹App_Data然后将access数据库放进去。
在程序运行开始加上这个方法:
 string p = AppDomain.CurrentDomain.BaseDirectory;
            if (p.IndexOf("\\bin\\") > 0)
            {
                if (p.EndsWith("\\bin\\Debug\\"))
                    p = p.Replace("\\bin\\Debug", "");
                if (p.EndsWith("\\bin\\Release\\"))
                    p = p.Replace("\\bin\\Release", "");
            }
            if (!p.EndsWith("App_Data\\"))
                p = p + "App_Data\\";
            AppDomain.CurrentDomain.SetData("DataDirectory", p);
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <!--站点日志配置部分-->
  <log4net>
    <root>
      <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="ALL"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionString value=" Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\site.accdb;Persist Security Info=False;" />
      <commandText value="INSERT INTO tbLog ([Date],[Thread],[Level],[Logger],[Message],[usernm]) VALUES (@log_date, @thread, @log_level, @logger, @message,@usernm)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="1024" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@usernm" />
        <dbType value="String" />
        <size value="1024" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{usernm}" />
        </layout>
      </parameter>
    </appender>
    <logger name="FCore" additivity="true">
      <appender-ref ref="AdoNetAppender_Access" />
      <level value="ALL" />
    </logger>
  </log4net>
</configuration>

3.创建log4net帮助

  class LogHelper
    {
        /// <summary>
        /// lock对象
        /// </summary>
        private static object lockLog = new object();

        static string _logpath;
        private static string LogPath
        {
            get
            {
                if (_logpath == null)
                    _logpath = AppDomain.CurrentDomain.BaseDirectory + "\\Log4net.xml";
                return _logpath;
            }
        }
        private static ILog _log;
        /// <summary>
        /// 记录Log信息
        /// </summary>
        public static ILog ToLog
        {
            get
            {
                if (_log == null)
                {
                    lock (lockLog)
                    {
                        System.IO.FileInfo file = new System.IO.FileInfo(LogPath);
                        log4net.Config.XmlConfigurator.ConfigureAndWatch(file);
                        //log4net.Config.XmlConfigurator.Configure(file);
                        _log = log4net.LogManager.GetLogger("FCore");
                        GlobalContext.Properties["usernm"] = "用户名";
                    }
                }
                return _log;
            }
        }
    }

    /// <summary>
    /// Log对外执行文件
    /// </summary>
    public class Log
    {
        /// <summary>
        /// 记录Error日志
        /// </summary>
        /// <param name="msg"></param>
        public static void Error(string msg)
        {
            LogHelper.ToLog.Error(msg);
        }
        /// <summary>
        /// 记录Warn日志
        /// </summary>
        /// <param name="msg"></param>
        public static void Warn(string msg)
        {
            LogHelper.ToLog.Warn(msg);
        }
        /// <summary>
        /// 记录Info日志
        /// </summary>
        /// <param name="msg"></param>
        public static void Info(string msg)
        {
            LogHelper.ToLog.Info(msg);
        }
        /// <summary>
        /// 记录Debug日志
        /// </summary>
        /// <param name="msg"></param>
        public static void Debug(string msg)
        {
            LogHelper.ToLog.Debug(msg);
        }
    }

4.调用

 Log.Info(MethodBase.GetCurrentMethod().DeclaringType.ToString() + ":" + GetMethodName());

  public static string GetMethodName()
        {
            var method = new StackFrame(1).GetMethod(); // 这里忽略1层堆栈,也就忽略了当前方法GetMethodName,这样拿到的就正好是外部调用GetMethodName的方法信息
            var property = (
                      from p in method.DeclaringType.GetProperties(
                               BindingFlags.Instance |
                               BindingFlags.Static |
                               BindingFlags.Public |
                               BindingFlags.NonPublic)
                      where p.GetGetMethod(true) == method || p.GetSetMethod(true) == method
                      select p).FirstOrDefault();
            return property == null ? method.Name : property.Name;
        }

另一种写入本地

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <!--站点日志配置部分-->
  <log4net>
    <root>
      <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
      <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
      <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
      <level value="ALL"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
    <appender name="DateAppender" type="log4net.Appender.RollingFileAppender">
      <bufferSize value="100" />
      <file value="C:\log\" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd&quot;.log&quot;" />
      <!--<param name="StaticLogFileName" value="false"/>-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="时间:%date/线程:[%thread]/level:%-5level/logger:%logger/property:[%property{NDC}]/method:%method/毫秒:%r/信息:%message%newline" />
      </layout>
    </appender>
    <logger name="FCore" additivity="true">
      <appender-ref ref="DateAppender" />
      <level value="INFO" />
    </logger>
  </log4net>
</configuration>

时间: 2024-10-10 06:24:08

log4net插入access自定义字段的相关文章

Log4net 使用之 自定义字段

Log4net 是.Net下一个非常优秀的开源日志记录组件.Log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介. 由于业务需要,计划为日志增加2个字段,除了Log4net默认字段,额外增加了LOG_TYPE 和 LOG_OPERATOR 两个字段用于对日志分类和记录相关操作的人员,以便于检索. 本文方法参考了StackOverFlow问答中的内容(https://stackoverflow.com/questions/12139486/log4net-

关于log4net自定义字段写入不进数据库的问题

网上的教程上配置文件基本上都差不多 <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <configSections> <section name="log4net" type="log4net.Config.Lo

Log4net 自定义字段到数据库(二)

这种方法比第一种方法麻烦些 Log4Net.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- Author:GaoBingBing--> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfiguratio

Log4net 自定义字段 写入Oracle 使用ODP.NET Managed驱动

一.环境说明: 开发工具:vs2010   ,数据库:oracle 11g ,版本:log4net的目前最新版本1.2.13.0    :  Oracle.ManagedDataAccess.dll  Version 4.121.1.0 二.官网dll准备 log4net      http://mirrors.hust.edu.cn/apache//logging/log4net/binaries/log4net-1.2.13-bin-newkey.zip Oracle.ManagedData

Log4net 自定义字段到数据库

今天要求做个log4net自定义字段到数据库,在网上找了好多例子,都运行不成功.最后找了个国外的,很简单的就解决了. log4net它已经定义的字段有 <commandText value="INSERT INTO xiao_log(Date,Thread,Level,Logger,Message)VALUES(@log_date, @thread, @log_level, @logger, @message)"/> 中的Date,Thread,Level,Logger,M

Log4Net 自定义字段记录到数据库

大家可能都用过Log4net插件来记录日志,该插件默认提供了这几个字段@log_date,@exception, @thread, @log_level, @logger, @message, 但是这并不能完全满足我们日常记录日志的需求,我们可能需要扩展自己所需的其他字段,来记录到数据库.例如,对于用户操作日志,我们可能需要记录操作人员ID或者姓名,或者操作类型或者操作信息等. 下面简单地介绍一下Log4Net 自定义字段记录到数据库: 第一步,当然是创建对应的数据库日志表,如下图所示: 第二步

禅道 给禅道缺陷增加是否遗留及来源渠道自定义字段

给禅道缺陷增加是否遗留及来源渠道自定义字段 by:授客 QQ:1033553122 实践环境 禅道项目管理软件9.2.1 .8.0开源Linux版 给数据库表zt_bug新增自定义字段 ALTER TABLE `zt_bug` ADD COLUMN isHistory VARCHAR(10) AFTER severity; ALTER TABLE `zt_bug` ADD COLUMN channel VARCHAR(50) AFTER severity; 修改zentaopms/module/

利用WordPress自定义字段为文章添加下载按钮

树经常要上传一些资源来给大家分享,但是每次都要手动加链接,关联图片,十分麻烦,于是就利用了一下wordpress的自定义字段功能来自动添加下载按钮下面就来说说怎么实现这个功能吧~其实方法很简单,利用的就是下面这一段代码 <?php if(get_post_meta($post->ID, "download", $single = true) != ""){ ?> <div id="download"> <a h

Linq多表链接分页,Select new{&quot;需要的字段列..&quot;},配合杨涛Mvcpager,前台遍历展示自定义字段

题前:,Select new{"需要的字段列.."}好处,减少不必要数据的查询,尤其是分布式的时候,网络再不好的情况下,而不必要的数据又很多,Select new{"需要的字段列.."}好处明显 如题,Linq多表链接分页,Select new{"需要的字段列.."},配合杨涛Mvcpager,前台遍历展示自定义字段 (1)  我的例子是,(Tb_Mnager)管理员表与(Tb_Role)角色表联查,返回两个表部分字段的组合 如下控制器代码: p