波斯马BOSSMA Information Technology

使用NLog记录Aquiles访问Cassandra的日志

发布时间:2011年12月16日 / 分类:NoSQL / 14,306 次浏览 / 评论

这篇文章一下子蹦出来三个名词,这里做个简单的介绍: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,想自己试试就抓紧时间吧。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《使用NLog记录Aquiles访问Cassandra的日志

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论