[转]NLog 自定义字段 写入 oracle
本文转自:http://www.cnblogs.com/skyapplezhao/p/5690695.html
1、通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码
2、建表语句
1 create table TBL_LOG
2 (
3 id VARCHAR2(60) not null,
4 appname VARCHAR2(20),
5 modulename VARCHAR2(30),
6 procname VARCHAR2(30),
7 operationtype VARCHAR2(20),
8 logger VARCHAR2(500),
9 logmessage VARCHAR2(3000) not null,
10 ip VARCHAR2(32),
11 longdate VARCHAR2(36),
12 username VARCHAR2(36),
13 createdate DATE default sysdate,
14 loglevel VARCHAR2(12)
15 )
3、NLog.config,正式运行 throwExceptions="false"
1 <?xml version="1.0" encoding="utf-8" ?>
2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
5 autoReload="true"
6 throwExceptions="true"
7 internalLogLevel="Info" internalLogFile="d:\work\log1.txt">
8 <targets async="true">
9 <target name="database" xsi:type="Database" keepConnection="false" useTransactions="true"
10 dbProvider="System.Data.OracleClient.OracleConnection,System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
11 connectionString="Data Source=ORCL;User Id=oracle;Password=oracle;Integrated Security=no;"
12 commandText="insert into TBL_LOG(APPNAME,MODULENAME,PROCNAME,OPERATIONTYPE,LOGGER,LOGMESSAGE,IP,LONGDATE,USERNAME,LOGLEVEL) values(:APPNAME,:MODULENAME,:PROCNAME,:OPERATIONTYPE,:LOGGER,:LOGMESSAGE,:IP,:TIME_STAMP,:USERNAME,:LOGLEVEL)">
13 <parameter name="APPNAME" layout="${event-context:item=APPNAME}" />
14 <parameter name="MODULENAME" layout="${event-context:item=MODULENAME}" />
15 <parameter name="PROCNAME" layout="${event-context:item=PROCNAME}" />
16 <parameter name="OPERATIONTYPE" layout="${event-context:item=OPERATIONTYPE}" />
17 <parameter name="LOGGER" layout="${event-context:item=LOGGER}" />
18 <parameter name="LOGMESSAGE" layout="${event-context:item=LOGMESSAGE}" />
19 <parameter name="IP" layout="${event-context:item=IP}" />
20 <parameter name="TIME_STAMP" layout="${longdate}" />
21 <parameter name="USERNAME" layout="${event-context:item=USERNAME}" />
22 <parameter name="LOGLEVEL" layout="${level:uppercase=true}" />
23 </target>
24 </targets>
25 <rules>
26 <logger name="*" minlevel="Trace" writeTo="database" />
27 </rules>
28 </nlog>
4、简单封装
1 public class Logger
2 {
3 #region 初始化
4 /// <summary>
5 /// 数据错误无法获取用户时使用
6 /// </summary>
7 public static string DefaultUser = "system";
8 /// <summary>
9 /// 默认地址
10 /// </summary>
11 public static string DefaultIP = "127.0.0.1";
12 NLog.Logger _logger;
13 private Logger(NLog.Logger logger)
14 {
15 _logger = logger;
16 }
17 public Logger(string name) : this(LogManager.GetLogger(name))
18 { }
19 public static Logger Default { get; private set; }
20 static Logger()
21 {
22 Default = new Logger(LogManager.GetCurrentClassLogger());
23 }
24 #endregion
25 #region Process日志写入
26 /// <summary>
27 /// 日志写入
28 /// </summary>
29 /// <param name="APPNAME">菜单大类</param>
30 /// <param name="MODULENAME">二级菜单</param>
31 /// <param name="PROCNAME">本级菜单</param>
32 /// <param name="OPERATIONTYPE">操作类型</param>
33 /// <param name="LOGMESSAGE">详细日志</param>
34 /// <param name="IP">ip地址</param>
35 /// <param name="USERNAME">用户名</param>
36 /// <param name="LOGGER">LOGGER</param>
37 public void Process(string APPNAME, string MODULENAME, string PROCNAME, OperationType OPERATIONTYPE, string LOGMESSAGE, string IP, string USERNAME, string LOGGER)
38 {
39 if (LOGMESSAGE.Length > 3000)
40 {
41 LOGMESSAGE = LOGMESSAGE.Substring(0, 3000);
42 }
43 LogEventInfo lei = new LogEventInfo();
44 lei.Properties["ID"] = Guid.NewGuid().ToString("D");
45 lei.Properties["APPNAME"] = APPNAME;
46 lei.Properties["MODULENAME"] = MODULENAME;
47 lei.Properties["PROCNAME"] = PROCNAME;
48 lei.Properties["OPERATIONTYPE"] = OPERATIONTYPE;
49 lei.Properties["LOGMESSAGE"] = LOGMESSAGE;
50 lei.Properties["IP"] = IP;
51 lei.Properties["USERNAME"] = USERNAME;
52 lei.Properties["LOGGER"] = LOGGER;
53 lei.Level = LogLevel.Info;
54 _logger.Log(lei);
55 }
56 /// <summary>
57 /// 日志写入,自己传日志类别
58 /// </summary>
59 /// <param name="APPNAME">菜单大类</param>
60 /// <param name="MODULENAME">二级菜单</param>
61 /// <param name="PROCNAME">本级菜单)</param>
62 /// <param name="OPERATIONTYPE">操作类型</param>
63 /// <param name="LOGMESSAGE">详细日志</param>
64 /// <param name="IP">ip地址</param>
65 /// <param name="USERNAME">用户名</param>
66 /// <param name="LOGGER">LOGGER</param>
67 /// <param name="Level">日志级别</param>
68 public void Process(string APPNAME, string MODULENAME, string PROCNAME, OperationType OPERATIONTYPE, string LOGMESSAGE, string IP, string USERNAME, string LOGGER, LogLevel Level)
69 {
70 if (LOGMESSAGE.Length > 3000)
71 {
72 LOGMESSAGE = LOGMESSAGE.Substring(0, 3000);
73 }
74 LogEventInfo lei = new LogEventInfo();
75 lei.Properties["ID"] = Guid.NewGuid().ToString("D");
76 lei.Properties["APPNAME"] = APPNAME;
77 lei.Properties["MODULENAME"] = MODULENAME;
78 lei.Properties["PROCNAME"] = PROCNAME;
79 lei.Properties["OPERATIONTYPE"] = OPERATIONTYPE;
80 lei.Properties["LOGMESSAGE"] = LOGMESSAGE;
81 lei.Properties["IP"] = IP;
82 lei.Properties["USERNAME"] = USERNAME;
83 lei.Properties["LOGGER"] = LOGGER;
84 lei.Level = Level;
85 _logger.Log(lei);
86 }
87 #endregion
88 }
89 /// <summary>
90 /// 操作类型枚举
91 /// </summary>
92 public enum OperationType
93 {
94 /// <summary>
95 /// 保存或添加
96 /// </summary>
97 [System.ComponentModel.Description("保存或添加")]
98 ADD,
99 /// <summary>
100 /// 更新
101 /// </summary>
102 [System.ComponentModel.Description("更新")]
103 UPDATE,
104 /// <summary>
105 /// 审核
106 /// </summary>
107 [System.ComponentModel.Description("审核")]
108 AUDIT,
109 /// <summary>
110 /// 删除
111 /// </summary>
112 [System.ComponentModel.Description("删除")]
113 DELETE,
114 /// <summary>
115 /// 读取/查询
116 /// </summary>
117 [System.ComponentModel.Description("读取/查询")]
118 RETRIEVE,
119 /// <summary>
120 /// 登录
121 /// </summary>
122 [System.ComponentModel.Description("登录")]
123 LOGIN,
124 /// <summary>
125 /// 查看
126 /// </summary>
127 [System.ComponentModel.Description("查看")]
128 LOOK
129 }
5、asp.net中的调用列子:
1 Logger.Default.Process("系统管理", "权限管理", "用户管理", OperationType.RETRIEVE, "测试写入", Logger.DefaultIP, Logger.DefaultUser, this.GetType().ToString(), NLog.LogLevel.Error);
2 Logger.Default.Process("系统管理", "权限管理", "用户管理", OperationType.RETRIEVE, "测试写入", Logger.DefaultIP, Logger.DefaultUser, this.GetType().ToString());
[转]NLog 自定义字段 写入 oracle的更多相关文章
- NLog 自定义字段 写入 oracle
1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴代码 2.建表语句 create table TBL_LOG ( id ) not null, appname ...
- NLog自定义字段写入数据库表,示例
//自定义字段写入NLog日志 private void saveNLog(InvokeLogModel model) { LogEventInfo ei = new LogEventInfo(); ...
- Log4net 自定义字段 写入Oracle 使用ODP.NET Managed驱动
一.环境说明: 开发工具:vs2010 ,数据库:oracle 11g ,版本:log4net的目前最新版本1.2.13.0 : Oracle.ManagedDataAccess.dll ...
- log4net自定义字段写入SqlServer数据库 ASP.net
首先申明,本示例经过本作者亲自试验通过,可以运行 第一步 编写log4net配置文件 此处为Log.xml,该文件放在与Web.config平级的位置 <?xml version="1 ...
- NetCore2.2使用Nlog自定义日志写入路径配置方式
在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析.第一种:默认Nlog可以通过日志级别来区分路径,——优点是不需要额外配置,开箱即用——缺点是不够灵活,如果超过级别数量,则不满足需求 ...
- Java自定义表单、自定义字段
最近想实现用户自定义数据库中的字段,我想大部分人第一想到的就是EAV(Entity-Attribute-Value),这种方式对于写一个小的毕业设计应该还可以使用,当然也有很多CMS系统采用这种方式, ...
- Log4net 自定义字段到数据库(二)
这种方法比第一种方法麻烦些 Log4Net.config <?xml version="1.0" encoding="utf-8" ?> <c ...
- Hibernate写入Oracle Date类型处理
Hibernate写入Oracle数据库时,数据库设计字段为Date类型时,只能保存年月日,不能保存时分秒,如果要保存时分秒,需修改Hibernate.cfg.xml文件 <property n ...
- Log4net 使用之 自定义字段
Log4net 是.Net下一个非常优秀的开源日志记录组件.Log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介. 由于业务需要,计划为日志增加2个字段,除了 ...
随机推荐
- 搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡
转载:https://www.cnblogs.com/xiongze520/p/10308720.html 分布式,集群,云计算机.大数据.负载均衡.高并发······当耳边响起这些词时,做为一个菜鸟 ...
- 虚拟机ping 不通主机,主机可ping 虚拟机解决方法
在VMware虚拟机里安装了CentOS的系统发现桥接模式Ping不通外网,Ping主机也ping 不通,但是主机可以ping 虚拟机. 百度了以下,原因是w10防火墙搞的鬼,解决办法有两种: 1.关 ...
- php 中将完整的年月日时分秒的时间转换成 年月日的形式
strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数), 将完整的时间格式转换成时间撮的形式,再去进 ...
- [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中任何节点
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:阻止用户点击选中Tree中任何节点 ...
- oracle 创建临时表空间/表空间,用户及授权
1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj ...
- css3里面的-webkit-transition
css3里面的-webkit-transition (1)-webkit-transition-timing-function 可以定义动画的变化时间曲线-webkit-transition-timi ...
- python 简单爬虫(beatifulsoup)
---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或 ...
- 51nod 1943 联通期望 题解【枚举】【二进制】【概率期望】【DP】
集合统计类期望题目. 题目描述 在一片大海上有 \(n\) 个岛屿,规划建设 \(m\) 座桥,第i座桥的成本为 \(z_i\),但由于海怪的存在,第 \(i\) 座桥有 \(p_i\) 的概率不能建 ...
- iis+php(FastCGI)
1. 安装 IIS 时选择添加 CGI 功能 2. 安装 PHP, 2.1 下载 nts 版本 (非线程安全版本) zip 压缩包,下载对应的 vc++ 运行时(php官网下载页面左侧有下载链接) 2 ...
- apk包不能生成的原因之debug.keystore
在Eclipse里面编译生成的APK中有一个签名的,它默认的key是debug.keystore,它默认的路径是: C:\Users\<用户名>\.android\debug.keysto ...