1 /// <summary>
2 /// Nlog日志帮助类
3 /// </summary>
4 public class LoggerHelper
5 {
6 #region 单例模式
7 private LoggerHelper()
8 {
9 }
10 private static readonly object LockObj = new object();
11 private static LoggerHelper _instance;
12
13 /// <summary>
14 /// 获得对象实例
15 /// </summary>
16 public static LoggerHelper Instance
17 {
18 get
19 {
20 lock (LockObj)
21 {
22 if (_instance == null)
23 {
24 _instance = new LoggerHelper();
25 }
26 return _instance;
27 }
28 }
29 }
30
31 #endregion 单例模式
32
33 #region 属性
34
35 private Logger _log;
36 /// <summary>
37 /// 日志实例
38 /// </summary>
39 public Logger Log
40 {
41 get
42 {
43 if (_log == null) _log = LogManager.GetCurrentClassLogger();
44 return _log;
45 }
46 private set { _log = value; }
47 }
48 #endregion 属性
49
50 #region 方法
51
52 #region 普通方式
53 public void Debug(string msg)
54 {
55 Log.Debug(msg);
56 }
57 public void Debug(string msg, params object[] args)
58 {
59 Log.Debug(msg, args);
60 }
61 public void Debug(string msg, Exception ex)
62 {
63 Log.Debug(ex, msg);
64 }
65 public void Warn(string msg)
66 {
67 Log.Warn(msg);
68 }
69 public void Warn(string msg, params object[] args)
70 {
71 Log.Warn(msg, args);
72 }
73 public void Warn(string msg, Exception ex)
74 {
75 Log.Warn(ex, msg);
76 }
77 public void Trace(string msg)
78 {
79 Log.Trace(msg);
80 }
81 public void Trace(string msg, params object[] args)
82 {
83 Log.Trace(msg, args);
84 }
85 public void Trace(string msg, Exception ex)
86 {
87 Log.Trace(ex, msg);
88 }
89 public void Fatal(string msg, params object[] args)
90 {
91 Log.Fatal(msg, args);
92 }
93
94 public void Fatal(string msg, Exception ex)
95 {
96 Log.Fatal(ex, msg);
97 }
98 #endregion 普通方式
99
100 #region 运行时日志
101 /// <summary>
102 /// 运行时日志
103 /// </summary>
104 /// <param name="msg">记录的信息</param>
105 public void Info(string msg)
106 {
107 LogEventInfo logInfo = SetCustomInfo(LogLevel.Info, "Runlog", msg);
108 Log.Log(LogLevel.Info, logInfo);
109 }
110 #endregion 运行时日志
111
112 #region 错误日志
113 /// <summary>
114 /// 错误记录
115 /// </summary>
116 /// <param name="msg">方法名</param>
117 /// <param name="ex">异常</param>
118 public void Error(string msg)
119 {
120 LogEventInfo logInfo = SetCustomInfo(LogLevel.Error, "ExceptionLogger", msg);
121 logInfo.Properties["ErrorHead"] = "程序发生错误:";
122 Log.Log(LogLevel.Error, logInfo);
123 }
124 /// <summary>
125 /// 错误记录
126 /// </summary>
127 /// <param name="msg">方法名</param>
128 /// <param name="ex">异常</param>
129 public void Error(string msg, Exception ex)
130 {
131 LogEventInfo logInfo = SetCustomInfo(LogLevel.Error, "ExceptionLogger", msg);
132 logInfo.Properties["ErrorHead"] = "程序发生错误:";
133 logInfo.Exception = ex;
134 Log.Log(LogLevel.Error, logInfo);
135 }
136 #endregion 错误日志
137
138 #region 私有方法
139 /// <summary>
140 /// 设置自定义日志事件
141 /// </summary>
142 /// <param name="level"></param>
143 /// <param name="loggerName"></param>
144 /// <param name="message"></param>
145 /// <param name="customPropertie"></param>
146 /// <param name="customPropertieValue"></param>
147 /// <returns></returns>
148 private LogEventInfo SetCustomInfo(LogLevel level, string loggerName, string message, string customPropertie = "", string customPropertieValue = "")
149 {
150 LogEventInfo ei = new LogEventInfo(level, loggerName, message); //也可以用LogEventInfo.Create(level, loggerName, message);
151 if (!string.IsNullOrEmpty(customPropertie) && !string.IsNullOrEmpty(customPropertieValue))
152 ei.Properties[customPropertie] = customPropertieValue;
153 return ei;
154
155 }
156 #endregion 私有方法
157
158 #endregion 方法
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
7 <!-- Use below one for debugging-->
8 <!--nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
9 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10 xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
11 autoReload="true"
12 throwExceptions="true"
13 internalLogLevel="Trace"
14 internalLogFile="c:\temp\nlog-internal.log"-->
15
16 <extensions>
17 <add assembly="Microsoft.Xrm.Log"/>
18 </extensions>
19
20 <variable name="floderInfo" value="Info"/>
21 <variable name="floderError" value="Error"/>
22
23 <targets>
24 <target name="XrmTraceETWTarget" xsi:type="XrmTraceETWTarget" />
25
26 <target name="DataProviderExecutionETWTarget" xsi:type="DataProviderExecutionETWTarget" />
27 <!-- ${basedir} -->
28 <target name="XrmTraceFileTarget" xsi:type="File"
29 layout="${longdate}|${logger}|${level:uppercase=true}|${message}|${all-event-properties}|${exception:format=tostring}"
30 fileName="D:/CrmLog/logs/logfile.txt"
31 archiveFileName="D:/CrmLog/archives/log.{#####}.txt"
32 archiveAboveSize="1024000"
33 archiveNumbering="Sequence"
34 concurrentWrites="true"
35 keepFileOpen="false"
36 encoding="utf-8" />
37 <!-- ${basedir} -->
38 <target name="debug_info_file" xsi:type="File"
39 layout="${longdate}|${logger}|${level:uppercase=true}|${message}|${all-event-properties}|${exception:format=tostring}"
40 fileName="D:/CrmLog/logs/${floderInfo}/${shortdate}.txt"
41 archiveFileName="D:/CrmLog/archives/${shortdate}.{#####}.txt"
42 archiveAboveSize="1024000"
43 archiveNumbering="Sequence"
44 concurrentWrites="true"
45 keepFileOpen="false"
46 encoding="utf-8" />
47 <!--错误记录 开始-->
48 <target name="error_file" xsi:type="File"
49 layout="${newline}${longdate} ${level:uppercase=true} ${event-context:item=ErrorHead}${newline} ${message} 发生异常: ${onexception:${exception:format=tostring} ${newline} 堆栈信息为: ${stacktrace} ${newline}------------------------------------ "
50 fileName="D:/CrmLog/Logs/${floderError}/${shortdate}.txt"
51 archiveFileName="D:/CrmLog/archives/${floderError}/${shortdate}.{#####}.txt"
52 archiveAboveSize="1024000"
53 archiveNumbering="Sequence"
54 concurrentWrites="true"
55 keepFileOpen="false"
56 encoding="utf-8"/>
57 <!--错误记录 结束-->
58 </targets>
59
60
61
62 <rules>
63 <!-- Add custom rule here -->
64 <logger name="Microsoft.Xrm.DataProvider*" minLevel="Debug" writeTo="DataProviderExecutionETWTarget" final="true"/>
65 <logger name="Microsoft.Xrm.DataPipeline" minLevel="Debug" writeTo="DataProviderExecutionETWTarget" final="true"/>
66 <logger name="*" minLevel="Debug" writeTo="debug_info_file" />
67 <logger name="*" levels="Error" writeTo="error_file" />
68
69 <!-- Add default XrmTrace logging rule "*" here if you want to override in production-->
70
71 </rules>
72 </nlog>
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio
我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame
我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr
我有这个代码:context"Visitingtheusers#indexpage."dobefore(:each){visitusers_path}subject{page}pending('iii'){shouldhave_no_css('table#users')}pending{shouldhavecontent('Youhavereachedthispageduetoapermissionic错误')}它会导致几个待处理,例如ManagingUsersGivenapractitionerloggedin.Visitingtheusers#indexpage.#Noreason