这篇文章一下子蹦出来三个名词,这里做个简单的介绍:NLog是.NET平台下灰常优秀的日志组件,Aquiles是.NET平台下访问Cassandra的高级API,Cassandra是一个NoSql的数据分布式存储工具。
日志是谁产生的?
分析来分析去应该是Aquiles产生的,Cassandra本身也有日志记录的功能,两者记录的东西不一样。
怎么获取Aquiles的日志?
Aquiles定义了一个接口:Aquiles.Core.Diagnostics.ILogger。
继承这个接口,实现相关日志输出方法。Aquiles会自动传输日志到这些接口方法。
当然要让Aquiles找到ILogger的实现类,还需要在config中配置一下。
如何输出日志?
这个就得使用伟大的NLog了,还可以配置日志的输出级别。
说了这么多,具体怎么做啊,请看下文:
1、在项目中添加NLog文件的引用
2、实现ILogger接口:
public class CassandraLogWriter : ILogger
{
private static readonly Logger logger;
static CassandraLogWriter()
{
logger = LogManager.GetLogger("CassandraLog");
}
#region ILogger Members
/// <summary>
/// 致命错误日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
public void Fatal(string className, object message)
{
this.Fatal(className, message, null);
}
/// <summary>
/// 致命错误日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public void Fatal(string className, object message, Exception exception)
{
logger.Fatal("[" + className + "]" + ((message != null) ? message.ToString() : String.Empty), exception);
}
/// <summary>
/// 一般错误日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
public void Error(string className, object message)
{
this.Error(className, message, null);
}
/// <summary>
/// 一般错误日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public void Error(string className, object message, Exception exception)
{
logger.Error("[" + className + "]" + ((message != null) ? message.ToString() : String.Empty), exception);
}
/// <summary>
/// 警告日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
public void Warn(string className, object message)
{
this.Warn(className, message, null);
}
/// <summary>
/// 警告日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public void Warn(string className, object message, Exception exception)
{
logger.Warn("[" + className + "]" + ((message != null) ? message.ToString() : String.Empty), exception);
}
/// <summary>
/// 普通消息日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
public void Info(string className, object message)
{
this.Info(className, message, null);
}
/// <summary>
/// 普通消息日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public void Info(string className, object message, Exception exception)
{
logger.Info("[" + className + "]" + ((message != null) ? message.ToString() : String.Empty), exception);
}
/// <summary>
/// 跟踪消息日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
public void Trace(string className, object message)
{
this.Trace(className, message, null);
}
/// <summary>
/// 跟踪消息日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public void Trace(string className, object message, Exception exception)
{
logger.Trace("[" + className + "]" + ((message != null) ? message.ToString() : String.Empty), exception);
}
/// <summary>
/// 调试消息日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
public void Debug(string className, object message)
{
this.Debug(className, message, null);
}
/// <summary>
/// 调试消息日志
/// </summary>
/// <param name="className"></param>
/// <param name="message"></param>
/// <param name="exception"></param>
public void Debug(string className, object message, Exception exception)
{
logger.Debug("[" + className + "]" + ((message != null) ? message.ToString() : String.Empty), exception);
}
#endregion
}
3、在web.config中配置接口实现类:
<!-- Cassandra 配置 -->
<aquilesConfiguration>
<loggingManager>ZhiJia.Listen.Db.CassandraLogWriter,ZhiJia.Listen.Db</loggingManager>
</aquilesConfiguration>
4、将NLog.config引入项目(放到根目录即可),配置NLog:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="true">
<targets>
<target name="asyncCasssndraNLogFile" xsi:type="AsyncWrapper">
<target name="retryCassandraNLogFile" xsi:type="RetryingWrapper">
<target name="CassandraNLogFile" xsi:type="File" fileName="${basedir}/logs/cassandra/${date:format=yyyyMMdd_HH}.txt" layout="${longdate} [${level}] - ${message}" />
</target>
</target>
</targets>
<rules>
<logger name="CassandraLog" minlevel="Debug" writeTo="asyncCasssndraNLogFile" />
</rules>
</nlog>
每小时产生一个日志文件,日志量确实很大啊。
OK,想自己试试就抓紧时间吧。
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论