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的功能,而实 ...
随机推荐
- LOJ3123 CTS2019 重复 KMP自动机、DP、多项式求逆
传送门 CTS的计数题更完辣(撒花 Orz zx2003,下面的内容在上面的博客基础上进行一定的补充. 考虑计算无限循环之后不存在子串比\(s\)字典序小的串的个数.先对串\(s\)建立KMP自动机, ...
- PCL提取圆柱系数
网上看了很多教程,没看到圆柱提取后的系数解释. 源码如下: #include <pcl/ModelCoefficients.h> #include <pcl/io/pcd_io.h& ...
- 机器码-字节码-CLR-JIT-托管代码-非托管代码-unsafe-GC-fixed
0. 机器码 直接由机器码对应平台的CPU执行的指令集, 因此无法在其他指令集的CPU上运行. 无法跨平台. 由本地代码编译得到. (托管代码通过JIT生成) 1. 字节码 即 bytecode 是一 ...
- python day 11: 类的补充,元类,魔法方法,异常处理
目录 python day 11 1. 类的补充 1.1 通过反射来查找类,创建对象,设置对象的属性与方法 1.2 类的魔法方法:getitem,setitem 1.3 元类__metaclass__ ...
- Bootstrap 结合 PHP ,做简单的登录以及注册界面及功能
登录实现 HTML代码 <div class="container"> <?php if (isset($error_msg)): ?> <div c ...
- requests模块 简单使用
目录 requests模块 简单使用 Anaconda简单了解 简单了解 requests模块 使用requests模块 爬取搜狗首页源码数据 实现一个简易的网页采集器 解决乱码问题 解决UA检测问题 ...
- Python学习笔记【1】
1.%r和%s的区别 (1)stackflow 上面的一个解答 (2) x = "There are %d types of people." %10 binary = " ...
- CentOS7搭建git服务器
在CentOS7上搭建git服务器, 1.在Linux上安装git yum install -y git 验证是否安装成功,出现版本号即成功 git --version 2.创建版本库和用户 创建用户 ...
- 22,Django常用命令
学习Django你需要了解常见命令的使用,比如创建项目,创建应用,创建超级用户,数据表创建及更新,启动服务器等.这些命令都包含在django-admin.py和manage.py里.除此以外manag ...
- ssh无密码连接
1. 生成密钥对文件 [root@centos2 ~]# -t 指定加密类型 -b 指定密钥对加密长度 询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下 询问2:是否 ...