异常日志的记录和监控主要依赖于StackExchange.Exceptional组件,默认已经被引进来了。
先看下config文件夹下的ExceptionsSettings.json.example文件
{ "warningRecentCount": "100", //警告提醒最近条目数,当超出该值在头部高亮显示警告 "criticalRecentCount": "200", //严重警告提醒最近条目数,当超出该值在头部高亮显示严重警告 "viewGroups": "StatusExceptionsRO", //安全模式“ad"下的分组查看权限设置 // You can have a simple applications list here, or a grouped structure when dealing with many apps. //"applications": [ //产生异常日志的程序 // "Core", // "Chat", // "Stack Auth", // "StackExchange.com", // "API", // "API v2", // "Area 51", // "Status", // "Push Server", // "Sockets", // "Careers", // "BackOffice", // "Control Panel" //], //以分组在形式归类异常日志,未在groups定义的在others中显示 "groups": [ { "name": "Core Q&A", "applications": [ "Core", "Chat", "Stack Auth", "StackExchange.com", "API v2", "Sockets", "Area 51", "Open ID", "Stack Server", "StackSnippets", "Status" ] }, { "name": "Careers", "applications": [ "Careers", "BackOffice", "BackOffice", "Control Panel", "StackShop", "CareersAuth" ] }, { "name": "Mobile", "applications": [ "Push Server" ] }, { "name": "Ads & Data", "applications": [ "Prov Read API" ] } ], "stores": [ //异常日志存储位置 { "name": "New York", "queryTimeoutMs": 2000, "pollIntervalSeconds": 10, "connectionString": "Data Source=192.168.11.210;Initial Catalog=Opserver;User ID=sa;Password=Luzou+18518095396;" } ],
"stackTraceReplacements": [
{
"name": "github",
"pattern": "(?<= in )https?://raw.githubusercontent.com/([^/]+/)([^/]+/)([^/]+/)(.*?):line (\d+)",
"replacement": "<a href="https://github.com/$1$2blob/$3$4#L$5">$4:line $5</a>"
}
] }
首先需要建一下数据库
CREATE TABLE [dbo].[Exceptions](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[GUID] [uniqueidentifier] NOT NULL,
[ApplicationName] [nvarchar](50) NOT NULL,
[MachineName] [nvarchar](50) NOT NULL,
[CreationDate] [datetime] NOT NULL,
[Type] [nvarchar](100) NOT NULL,
[IsProtected] [bit] NOT NULL,
[Host] [nvarchar](100) NULL,
[Url] [nvarchar](500) NULL,
[HTTPMethod] [nvarchar](10) NULL,
[IPAddress] [varchar](40) NULL,
[Source] [nvarchar](100) NULL,
[Message] [nvarchar](1000) NULL,
[Detail] [nvarchar](max) NULL,
[StatusCode] [int] NULL,
[SQL] [nvarchar](max) NULL,
[DeletionDate] [datetime] NULL,
[FullJson] [nvarchar](max) NULL,
[ErrorHash] [int] NULL,
[DuplicateCount] [int] NOT NULL,
CONSTRAINT [PK_Exceptions] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Exceptions] ADD DEFAULT ((0)) FOR [IsProtected]
GO
ALTER TABLE [dbo].[Exceptions] ADD DEFAULT ((1)) FOR [DuplicateCount]
GO
然后webconfig下需要进行配置
<Exceptional applicationName="Status"> <ErrorStore type="SQL" connectionString="Data Source=192.168.11.210;Initial Catalog=Opserver;User ID=sa;Password=*******" /> </Exceptional>
<!-- Which ErrorStore to use, if no element is declared here a Memory store with defaults will be used --> <!--<ErrorStore type="Memory" />--> <!-- Other store types, common attributes: - rollupSeconds: optional (default 600 seconds), determines how long the window is to roll up exceptions with the same stack trace - 0 to not roll up - backupQueueSize: optional (default 1000), determines how many errors to cache (excluding rollups) in memory when logging fails...every 2 seconds we'll retry logging and flush these out to the final store --> <!-- JSON: size defaults to 200, this is how many files are kept before the oldest error is removed --> <!--<ErrorStore type="JSON" path="~/Errors" size="200" />--> <!-- SQL: only a connection string or connection string name is needed, many applications can log to the same place as long as they have unique names (otherwise we can't tell them apart). --> <!--<ErrorStore type="SQL" connectionString="Server=.;Database=Exceptions;Uid=Exceptions;Pwd=myPassword!" />--> <!--<ErrorStore type="SQL" connectionStringName="MyConnectionString" />--> <!-- You can also use a MySQL Database with the MySQL ErorrStore --> <!--<ErrorStore type="MySQL" connectionString="Server=.;Database=Exceptions;Username=Exceptions;Pwd=myPassword!" />--> <!--<ErrorStore type="MySQL" connectionStringName="MyConnectionString" />-->
好吧,其实这就搞定了,就是这么简单,然后上下效果图


Opserver系列目录 http://www.cnblogs.com/xiaopotian/category/1007536.html