如何将日志从 T-SQL 程序发送到 GrayLog?
How to send logs to GrayLog from T-SQL procedures?
我可以使用 log4net+GELF appender 从 C# 应用程序将日志发送到日志收集器。
但是如何将日志从T-SQL程序发送到GrayLog?
有代码:
WinForms 应用程序工作正常,我 运行 它在安装 SQL 服务器的同一台机器上。我在 GrayLog 中看到收到的所有日志:
private void button1_Click(object sender, EventArgs e)
{
字符串设施=“DoBeDo”;
string host = "我的主机名";
内部端口 = 12201;
try
{
using (var logger = new GrayLogUdpClient(facility, host, port))
{
logger.Send("Hello", "Jonny Holiday", new { Username = "John", Email = "jonny@example.com" });
}
}
catch(Exception xx)
{
Console.WriteLine("***Exception:{0}", xx.Message);
}
}
有 SQLCLR 代码,它有效,我在 SSMS 中看到消息,但在 GrayLog 中没有任何记录,也没有任何异常:
public 部分 class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void SqlSPHelper(SqlString msg)
{
尝试
{
SqlContext.Pipe.Send(@"SqlSPHelper::启动");
字符串设施=“DoBeDo”;
string host = "我的主机名";
内部端口 = 12201;
try
{
using (var logger = new GrayLogUdpClient(facility, host, port))
{
logger.Send("Hey", "Donny Hooligan", new { Username = "Donald", Email = "Donny@example.com" });
}
}
catch (Exception xx)
{
Console.WriteLine("***Exception:{0}", xx.Message);
}
}
catch(Exception xx)
{
SqlContext.Pipe.Send("1:"+xx.Message);
}
SqlContext.Pipe.Send(@"SqlSPHelper:: Completed");
}
怎么了?如何将日志发送到GrayLog?
我认为您可以通过以下几种方式做到这一点:
- 定义一个 CLR 存储过程,它执行日志记录部分
- 在存储过程的 CATCH 块中,RAISERROR WITH LOG 写入 Windows 事件查看器和 SQL 服务器错误日志。稍后您可以从 GrayLog 中的事件查看器中过滤和读取这些事件。
第一种方法更好,因为它更干净。第二种方法使 SQL 服务器错误日志有很多日志条目,这会导致 DBA 团队误报。
我可以使用 log4net+GELF appender 从 C# 应用程序将日志发送到日志收集器。
但是如何将日志从T-SQL程序发送到GrayLog? 有代码:
WinForms 应用程序工作正常,我 运行 它在安装 SQL 服务器的同一台机器上。我在 GrayLog 中看到收到的所有日志:
private void button1_Click(object sender, EventArgs e) { 字符串设施=“DoBeDo”; string host = "我的主机名"; 内部端口 = 12201;
try { using (var logger = new GrayLogUdpClient(facility, host, port)) { logger.Send("Hello", "Jonny Holiday", new { Username = "John", Email = "jonny@example.com" }); } } catch(Exception xx) { Console.WriteLine("***Exception:{0}", xx.Message); } }
有 SQLCLR 代码,它有效,我在 SSMS 中看到消息,但在 GrayLog 中没有任何记录,也没有任何异常:
public 部分 class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void SqlSPHelper(SqlString msg) { 尝试 { SqlContext.Pipe.Send(@"SqlSPHelper::启动"); 字符串设施=“DoBeDo”; string host = "我的主机名"; 内部端口 = 12201;
try { using (var logger = new GrayLogUdpClient(facility, host, port)) { logger.Send("Hey", "Donny Hooligan", new { Username = "Donald", Email = "Donny@example.com" }); } } catch (Exception xx) { Console.WriteLine("***Exception:{0}", xx.Message); } } catch(Exception xx) { SqlContext.Pipe.Send("1:"+xx.Message); } SqlContext.Pipe.Send(@"SqlSPHelper:: Completed"); }
怎么了?如何将日志发送到GrayLog?
我认为您可以通过以下几种方式做到这一点:
- 定义一个 CLR 存储过程,它执行日志记录部分
- 在存储过程的 CATCH 块中,RAISERROR WITH LOG 写入 Windows 事件查看器和 SQL 服务器错误日志。稍后您可以从 GrayLog 中的事件查看器中过滤和读取这些事件。
第一种方法更好,因为它更干净。第二种方法使 SQL 服务器错误日志有很多日志条目,这会导致 DBA 团队误报。