这篇文章一下子蹦出来三个名词,这里做个简单的介绍: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大全
文章分类
最新评论