VS - Microsoft.Practices.EnterpriseLibrary.Logging
string fileName = AppDomain.CurrentDomain.BaseDirectory + "\\log.txt";
File.AppendAllText(fileName, "start\r\n", Encoding.UTF8);
version 6.0.0.0 need set ExceptionManager
PM> Install-Package EnterpriseLibrary.Logging
PM> Install-Package EnterpriseLibrary.Common
PM> Install-Package EnterpriseLibrary.ExceptionHandling
PM> Install-Package EnterpriseLibrary.ExceptionHandling.Logging
Microsoft.Practices.EnterpriseLibrary.ConfigConsoleV6.vsix。这个工具的下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=38789
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
<section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; static AppLogger()
{
Logger.SetLogWriter(new LogWriterFactory().Create());
IConfigurationSource config = ConfigurationSourceFactory.Create();
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config); ExceptionManager exManager = factory.CreateManager();
ExceptionPolicy.SetExceptionManager(factory.CreateManager());
} public static void LogError(Exception ex)
{
lock (staticLock)
{ ExceptionPolicy.HandleException(ex, AppConfiguration.ExceptionPolicyName);
}
}
App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
<section name="exceptionHandling" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Common.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="Common.Interfaces.IGetServiceResponseBLL,R365.Common" mapTo="Common.BusinessLogic.CallTestBLL,Common" />
</container>
</unity>
<applicationSettings>
<Common.Properties.Settings> </Common.Properties.Settings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<add name="Event Log Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
source="test Logging" formatter="Text Formatter"
log="" machineName="." traceOutputOptions="None" />
<add name="Email Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.EmailTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
toAddress="test@test.com.cn" fromAddress="test@test.com.mo"
subjectLineStarter="[test] " subjectLineEnder="- DEV"
smtpServer="smtpserver.test.com.cn" formatter="Text Formatter" />
<add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
databaseInstanceName="TestConnectionString" writeLogStoredProcName="WriteLog"
addCategoryStoredProcName="AddCategory" formatter="Text Formatter" traceOutputOptions="None" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="Timestamp: {timestamp}{newline}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
Extended Properties: {dictionary({key} - {value}{newline})}"
name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Event Log Listener" />
</listeners>
</add>
<add switchValue="All" name="Error">
<listeners>
<add name="Event Log Listener" />
<add name="Email Trace Listener" />
<add name="Database Trace Listener"/>
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events" />
<notProcessed switchValue="All" name="Unprocessed Category" />
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Event Log Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
<exceptionHandling>
<exceptionPolicies>
<add name="Exception Policy">
<exceptionTypes>
<add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="NotifyRethrow">
<exceptionHandlers>
<add name="Logging Exception Handler" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
logCategory="Error" eventId="100" severity="Error" title="Exception Handling"
formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling"
priority="0" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
<add name="Log Only Policy">
<exceptionTypes>
<add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="None">
<exceptionHandlers>
<add name="Logging Exception Handler" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
logCategory="Error" eventId="100" severity="Error" title="Exception Handling"
formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling"
priority="0" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy usesystemdefault="False" proxyaddress="http://proxyip:80" bypassonlocal="True" />
</defaultProxy>
</system.net>
</configuration>
AppLogger.cs
public static class AppLogger
{
private static Object staticLock = new object(); static AppLogger()
{
Logger.SetLogWriter(new LogWriterFactory().Create());
IConfigurationSource config = ConfigurationSourceFactory.Create();
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config); ExceptionManager exManager = factory.CreateManager();
ExceptionPolicy.SetExceptionManager(factory.CreateManager());
} public static void LogError(Exception ex)
{
lock (staticLock)
{ ExceptionPolicy.HandleException(ex, AppConfiguration.ExceptionPolicyName);
}
} public static void LogErrorOnly(Exception ex)
{
lock (staticLock)
{
try
{
ExceptionPolicy.HandleException(ex, AppConfiguration.LogOnlyPolicyName);
}
catch(Exception excep) {
LogHelper.LogInfo(excep.Message);
}
}
} public static bool HandleException(Exception ex, string exceptionPolicyName)
{
lock (staticLock)
{
return ExceptionPolicy.HandleException(ex, exceptionPolicyName);
}
} public static void Write(object message)
{
lock (staticLock)
{
Logger.Write(message);
}
} public static void Write(object message, string category)
{
lock (staticLock)
{
Logger.Write(message, category);
}
} public static void Write(object message, TraceEventType severity)
{
lock (staticLock)
{
LogEntry entry = new LogEntry();
entry.Message = message == null ? "" : message.ToString();
entry.Severity = severity;
Logger.Write(entry);
}
} public static void Debug(object message)
{
lock (staticLock)
{
string msg = string.Format("[{0:yyyy/MM/dd HH:mm:ss.fff}] {1}", DateTime.Now, message);
try
{
System.Diagnostics.Debug.WriteLine(msg);
}
catch (Exception ex)
{
LogErrorOnly(new ApplicationException(string.Format("Could not write debug message: {0}", msg), ex));
}
}
}
}
LogFormatHelper.cs
public class LogFormatHelper
{
public static string GetMethodDetail(MethodBase method){
// MethodBase.GetCurrentMethod().Name;
StringBuilder methodDetail = new StringBuilder(method.Name); ;
ParameterInfo[] paras = method.GetParameters();
StringBuilder parasStr = new StringBuilder();
foreach (ParameterInfo para in paras)
{
parasStr.Append(string.Format("{0} {1},",para.ParameterType.Name.ToString(),para.Name));
}
if( paras.Length > 0) parasStr.Remove(parasStr.Length - 1, 1);
methodDetail.Append("(").Append(parasStr.ToString()).Append(")");
return methodDetail.ToString();
} public static Dictionary<string, string> GetLogInfo(string methodName)
{
Dictionary<string, string> dics = new Dictionary<string, string> { { "MethodName", methodName }, { "SwitchUserPermission", WebHelper.SwitchUserPermission.ToString() }, { "FactoAd", WebHelper.FactoAd }, { "CurrentAd", WebHelper.CurrentAd }, { "TM", WebHelper.CurrentTm } };
return dics;
} public static Dictionary<string, string> GetLogInfo(string methodName, TimeSpan elapsed)
{
Dictionary<string, string> dics = GetLogInfo(methodName);
dics.Add("RequestElapsed", elapsed.ToString());
return dics;
} public static void LogServiceError(Exception ex, string methodName, params object[] objs)
{
try
{
Dictionary<string, string> dics = LogFormatHelper.GetLogInfo(methodName);
LogServiceError(ex, dics,objs);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogServiceError(Exception ex, string methodName, TimeSpan elapsed, params object[] objs)
{
try
{
Dictionary<string, string> dics = LogFormatHelper.GetLogInfo(methodName, elapsed);
LogServiceError(ex, dics, objs);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogServiceError(Exception ex, Dictionary<string, string> dics, params object[] objs)
{
try
{
AddParametersToError(ex, dics , objs);
AppLogger.LogError(ex);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogFunction(string functionName)
{
try
{
AppLogger.Write(functionName);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogFunction(string functionName, TimeSpan elapsed)
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat("FunctionName:{0}\r\nFunctionElapsed:{1}\r\n", functionName, elapsed);
AppLogger.Write(sb);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogRequestParams(string methodName, params object[] objs)
{
try
{
Dictionary<string, string> dics = GetLogInfo(methodName);
LogRequestParams(dics, objs);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogRequestParams(string methodName, TimeSpan elapsed , params object[] objs)
{
try
{
Dictionary<string, string> dics = GetLogInfo(methodName, elapsed);
LogRequestParams(dics, objs);
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogRequestParams(Dictionary<string,string> dics, params object[] objs)
{
try
{
StringBuilder sb = new StringBuilder();
foreach (var dic in dics)
{
sb.AppendFormat("{0} = {1}", dic.Key, dic.Value).AppendLine();
//LogRequestParams(obj);
}
sb.Append("Other objects =").AppendLine();
foreach (object obj in objs)
{
LogRequestParams(sb ,obj);
}
AppLogger.Write(sb.ToString());
}
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void LogRequestParams(StringBuilder sb,object obj)
{
try
{
Dictionary<string, object> result = BuildParametersDictionary(obj, "");
// StringBuilder sb = new StringBuilder();
// if (elapsed != null) sb.AppendFormat("Request Elapsed: {0}", elapsed).AppendLine();
sb.AppendFormat("{0}:", obj.GetType().Name).AppendLine();
foreach (var p in result)
{
sb.AppendFormat("{0} = {1}", p.Key, p.Value).AppendLine();
} }
catch (Exception innerExp)
{
innerExp.Data.Add("Logger error", innerExp.Message);
AppLogger.LogError(innerExp);
}
} public static void AddParametersToError(Exception ex, Dictionary<string,string> dics ,params object[] objs)
{
foreach (var dic in dics)
{
ex.Data.Add(dic.Key, dic.Value);
} foreach (object obj in objs)
{
AddParametersToError(ex,obj,"");
} } public static void AddParametersToError(Exception ex, object obj, string propertyNamePrefix)
{
if (obj == null)
return; Dictionary<string, object> parameters = BuildParametersDictionary(obj, propertyNamePrefix);
foreach (var p in parameters)
{
ex.Data.Add(p.Key, p.Value);
}
} private static Dictionary<string, object> BuildParametersDictionary(object obj, string propertyNamePrefix)
{
Dictionary<string, object> result = new Dictionary<string, object>();
if (obj == null)
return result; if (obj is string || obj is DateTime || obj is Boolean)
{
result.Add(obj.GetType().ToString(), obj.ToString());
return result;
} var properties = obj.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
Type pType = p.GetType();
object pValue = p.GetValue(obj, null);
if (pValue == null)
{
string pName = string.IsNullOrEmpty(propertyNamePrefix) ? p.Name : propertyNamePrefix + "." + p.Name;
result.Add(pName, "null");
}
else if (pType.IsValueType || pValue is string || pValue is DateTime || pValue is Boolean)
{
string pName = string.IsNullOrEmpty(propertyNamePrefix) ? p.Name : propertyNamePrefix + "." + p.Name;
if (p.Name.ToLower() == "password" || p.Name.ToLower() == "dateofbirth" || p.Name.ToLower() == "encrykey")
result.Add(pName, "******");
else
result.Add(pName, pValue);
}
else if (pType.FullName.Contains(typeof(List<>).FullName))
{
var list = obj as System.Collections.ICollection;
if (list != null && list.Count > 0)
{
int index = 0;
foreach (object objInList in list)
{
if (objInList is ValueType || objInList is string)
result.Add(p.Name + "[" + index.ToString() + "]", objInList);
else
{
Dictionary<string, object> childResult = BuildParametersDictionary(objInList, p.Name + "[" + index.ToString() + "]");
foreach (var e in childResult)
{
result.Add(e.Key, e.Value);
}
}
index++;
}
}
}
else if (pValue.GetType().FullName.Contains(typeof(List<>).FullName))
{
var list = pValue as System.Collections.ICollection;
if (list != null && list.Count > 0)
{
int index = 0;
foreach (object objInList in list)
{
if (objInList is ValueType || objInList is string)
result.Add(p.Name + "[" + index.ToString() + "]", objInList);
else
{
Dictionary<string, object> childResult = BuildParametersDictionary(objInList, p.Name + "[" + index.ToString() + "]");
foreach (var e in childResult)
{
result.Add(e.Key, e.Value);
}
}
index++;
}
}
}
}
return result;
}
}
string methodName = LogFormatHelper.GetMethodDetail(MethodBase.GetCurrentMethod());
LogFormatHelper.LogRequestParams(methodName, objectname);
VS - Microsoft.Practices.EnterpriseLibrary.Logging的更多相关文章
- Microsoft.Practices.EnterpriseLibrary.Logging的使用
翻译 原文地址:http://www.devx.com/dotnet/Article/36184/0/page/1 原文作者:Thiru Thangarathinam (好强大的名字) 翻译: fl ...
- Microsoft.Practices.EnterpriseLibrary企业库问题
System.Configuration.ConfigurationErrorsException: Invalid TraceListenerData type in configuration ' ...
- Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, ...
使用oracle数据库一个多月依赖这问题一直都得不到解决,最近任务不是很忙了,所以决定把这问题解决掉.写一篇文章做记录. 以上错误主要是net程序oracle数据库使用了Microsoft Enter ...
- Microsoft.Practices.EnterpriseLibrary
项目中使用了Microsoft.Practices.EnterpriseLibrary这个东西,根据名字猜测和微软有关系(可以翻译为:微软实践企业库). 看到了引入了两个命名空间: using Mic ...
- 缓存篇~第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存
返回目录 这一讲中主要是说EnterpriseLibrary企业级架构里的caching组件,它主要实现了项目缓存功能,它支持四种持久化方式,内存,文件,数据库和自定义,对于持久化不是今天讨论的重要, ...
- 错误:创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Caching,
问题: 错误:创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Caching ...
- c# 之 Microsoft.Practices.EnterpriseLibrary连接Oracle
首先下载Microsoft Enterprise Library 5.0:http://www.microsoft.com/en-us/download/details.aspx?id=15104,这 ...
- 在WebService中使用Microsoft.Practices.EnterpriseLibrary.Data配置数据库
1. 新建WebApplication1项目 1.1 新建—Web—ASP.NET Empty Web Application--WebApplication1 1.2 添加一个WebForm1 2. ...
- 第九回 Microsoft.Practices.Unity.Interception实现基于数据集的缓存(针对六,七,八讲的具体概念和配置的解说)
返回目录 概念 Microsoft.Practices.Unity.Interception是一个拦截器,它隶属于Microsoft.Practices.Unity组成之中,主要完成AOP的功能,而实 ...
随机推荐
- Deep one-class classification
Deep one-class classification 2019-03-17 23:09:59 zpainter 阅读数 1027 收藏 文章标签: 单分类问题异常检测 更多 分类专栏: 论文 ...
- JavaTCP粘包、拆包
import java.nio.ByteBuffer; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBu ...
- angularjs 中的路由 与 bootstrap标签选项卡的冲突 解决方案
当项目中使用了angularjs 的路由,则所有 像a标签的href 的链接都会走路由,实现页面跳转,那么有些地方需要使用选项卡,就会带来麻烦. 路由使用如下图: 某页面需要使用bootstrap的选 ...
- 微信web开发问题记录
问题一.微信浏览器中无法使用reload重载文档[VUE框架] 问题分析: 微信不支持location.reload()方法,在微信浏览器中会失效 Vue中的路由跳转是类似于ajax局部刷新,因此使用 ...
- cookie遇到java.lang.IllegalArgumentException: Control character in cookie value or attribute
java.lang.IllegalArgumentException: Control character in cookie value or attribute. 该异常说明cookie中的val ...
- oracle 中查询当前用户可以看到的表名、表对应的所有字段 原
转自:https://my.oschina.net/u/3783799/blog/2870207 1.oracle 查询当前用户下的表名,表注释 select t.table_name, f.comm ...
- c#生成高清字体图片
Graphics g = Graphics.FromImage(image); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Hig ...
- NSLog的各种打印格式符和打印CGRect相关结构体
1.打印CG开头的数据类型,如CGRect,CGSize等方法 1.1 打印CGRect : NSLog(@"%@", NSStringFromCGRect(someCGRect) ...
- Core Animation笔记(动画)
一.隐式动画 layer默认开启隐式动画 禁用隐式动画 [CATransaction setDisableActions:true]; 设置隐士动画时间 //默认0.25s [CATransactio ...
- 使用ranger替代资源浏览器
使用方法参考,这个是比较高校的: http://www.mikewootc.com/wiki/linux/usage/ranger_file_manager.html