ABP官方文档翻译 2.4 日志
日志
服务端
ABP使用Castle Windsor`s 日志设备。它可以使用不同的日志类库:Log4Net,Nlog,Serilog...等等。Castle提供了所有记录器类库的通用接口。所以,它独立于特定的日志类库,并且如果需要可以很方便的更换它。
Log4Net是.NET最流行的日志类库之一。ABP模板已经配置了Log4Net,可直接使用。ABP仅有一行log4net的配置代码(如在配置部分所见),所以可以轻松的更换为自己喜欢的类库。
获取记录器
不管选择哪种类库,写日志的代码是一样的(感谢Castle`s通用ILogger接口)。
首先,我们呢应该有一个记录器对象写日志。因为ABP强烈要求使用依赖注入,我们可以使用属性注入(或构造注入)一个记录器对象。请看下面的写了一行日志例子:
using Castle.Core.Logging; //1: Import Logging namespace public class TaskAppService : ITaskAppService
{
//2: Getting a logger using property injection
public ILogger Logger { get; set; } public TaskAppService()
{
//3: Do not write logs if no Logger supplied.
Logger = NullLogger.Instance;
} public void CreateTask(CreateTaskInput input)
{
//4: Write logs
Logger.Info("Creating a new task with description: " + input.Description); //TODO: save task to database...
}
}
首先,我们引入了Castle`s ILogger接口命名空间。
第二,我们定义了名为Logger的公共ILogger对象。我们将使用这个对象写日志。创建TaskAppService对象后,依赖注入系统将设置(注入)这个属性。这就是所熟知的属性注入模式。
第三,我们设置Logger为NullLogger.Instance。没有这行系统也会正常工作。但是这是属性注入模式的最佳实践。如果没有设置Logger,它将会为null,当我们使用它的时候回得到“object reference...”异常。这保证了它不会为null。所以,如果没有设置Logger,它将会是NullLogger。这是所熟知的null对象模式。NullLogger实际上什么也没做,不会写任何日志。然而,我们的类可以使用它正常工作,实际上并没有记录器。
第四,也是最后,我们使用info级别写了一个日志文本。有不同的级别(参见配置部分)。
如果我们调用CreateTask方法并检查日志文件,我们看见如下所示的一行日志:
INFO -- ::, [ ] SimpleTaskSystem.Tasks.TaskAppService - Creating a new task with description: Remember to drink milk before sleeping!
日志基类
ABP为MVC控制器、Web API控制器、应用服务类等提供了基类。他们声明了一个Logger属性。所以,可以直接使用这个Logger写日志,不需要注入。例如:
public class HomeController : SimpleTaskSystemControllerBase
{
public ActionResult Index()
{
Logger.Debug("A sample log message...");
return View();
}
}
注意SimpleTaskSystemControllerBase是我们应用特定基础控制器,继承自AbpController。从而,它可以直接使用Logger。也可以为其他类写自己的通用基类,然后,就不用每次都注入Logger了。
配置
当使用ABP模板创建应用的时候,所有Log4Net的配置都完成了。
默认配置的Log形式如下(每一行):
- LogLevel:DEBUG,INFO,WARN,ERROR or FATAL。
- Date and Time:当日志行写入时的时间。
- Thread number:写日志行的线程编码。
- Logger name:通常为写日志行类的名称。
- Log text:实际要写入的日志文本。
这些定义在应用的log4net.config文件,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Logs.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10000KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
</layout>
</appender>
<root>
<appender-ref ref="RollingFileAppender" />
<level value="DEBUG" />
</root>
<logger name="NHibernate">
<level value="WARN" />
</logger>
</log4net>
Log4Net是高可配置且强日志类库。写日志可以使用不同的形式,而且可以写入不同的目的地(文本文件,数据库...)。可以设置最小的日志级别(如在本配置中为NHibernate设置)。可以将不同的日志写入到不同的日志文件。当达到指定大小时(在本配置中每个文件达到10000KB时会自动回卷文件适配器),它会自动备份并创建新的日志文件等等。阅读它自己的配置文档了解更多。
最后,在Global.aspx文件中,我们声明Log4Net使用log4net.config文件:
public class MvcApplication : AbpWebApplication
{
protected override void Application_Start(object sender, EventArgs e)
{
IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("log4net.config"));
base.Application_Start(sender, e);
}
}
这是我们依赖log4net仅有的一行代码。也只有web工程依赖log4net类库nuget包。所以,可以容易更改为另一个类库而不用更改日志代码。
Abp.Castle.Log4Net包
ABP日志使用Castle日志设备,它不直接依赖于log4net ,如上声明的那样。但是Castle`s Log4Net集成有个问题,它不支持最新的log4net。我们创建了一个nuget包,Abp.Castle.Log4Net,解决这个问题。解决方案添加这个包之后,所有我们需要做的时在程序开始处像如下改变代码:
public class MvcApplication : AbpWebApplication
{
protected override void Application_Start(object sender, EventArgs e)
{
IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.UseAbpLog4Net().WithConfig("log4net.config"));
base.Application_Start(sender, e);
}
}
唯一的差别是我们使用“UseAbpLog4Net()”方法(定义在Abp.Castle.Logging.Log4Net命名空间)取代“UseLog4Net()”。当我们使用Abp.Castle.Log4Net包,不需要使用Castle.Windsor-log4net和Castle.Core-log4net包。
客户端
ABP定义了为客户端定义了一个简单的JavaScript日志API。它默认记录到浏览器控制台。JavaScript写日志示例代码如下:
abp.log.warn('a sample log message...');
了解更多信息,参见logging API文档。
ABP官方文档翻译 2.4 日志的更多相关文章
- ABP官方文档翻译 4.6 审计日志
审计日志 介绍 关于IAuditingStore 配置 通过特性启用/禁用 注意事项 介绍 维基百科:“审计追踪(也称为审计日志)是与安全相关的按时间先后的记录.记录集合.记录的目的地和源,提供一系列 ...
- 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
- ABP官方文档翻译 10.1 ABP Nuget包
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OD ...
- ABP官方文档翻译 7.3 Quartz集成
Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化 ...
- ABP官方文档翻译 7.1 后台Jobs和Workers
后台Jobs和Workers 介绍 后台Jobs 关于Job持久化 创建后台Job 在队列中添加一个新Job 默认的后台Job管理器 后台Job存储 配置 禁用Job执行 异常处理 Hangfire集 ...
- ABP官方文档翻译 6.6 Javascript API
JavaScript API AJAX 通知 消息 UI Block和Busy 事件总线 日志 其他实用功能 ABP提供了一套对象和函数,用来简化.标准化javascript的开发. 这里是ABP提供 ...
- ABP官方文档翻译 6.2.1 ASP.NET Core集成
ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...
- ABP官方文档翻译 6.1.1 MVC控制器
ASP.NET MVC控制器 介绍 AbpController基类 本地化 其他 过滤器 异常处理和结果包装 审计日志 验证 授权 工作单元 介绍 ABP通过Abp.Web.Mvc nuget包集成到 ...
- ABP官方文档翻译 5.1 Web API控制器
ASP.NET Web API控制器 介绍 AbpApiController基类 本地化 其他 过滤器 审计日志 授权 反伪造过滤器 工作单元 结果包装和异常处理 结果缓存 校验 模型绑定器 介绍 A ...
随机推荐
- Android无线测试之—UiAutomator UiScrollable API介绍六
向前与向后滚动API 一.向前与向后滚动相关API 返回值 API 描述 boolean scrollBackward(int steps) 自动以步长向后滑动 boolean scrollBackw ...
- AI画圆角矩形
如何画圆角矩形:设置矩形圆角大小 第一种方法:点击圆角矩形在画布上点一下; [caption id="attachment_878" align="alignnone&q ...
- Hibernate中的映射关系(一对多)
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...
- 百度jQuery库
<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>
- Unpacking and repacking stock rom .img files
http://forum.xda-developers.com/galaxy-s2/general/ref-unpacking-repacking-stock-rom-img-t1081239 OP ...
- Django 框架之Form组件
1. Django的Form主要具有以下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交的数据 初始化页面显示内容 2. 第一个案例: # 第一步: 创建 ...
- rest_framework 之版本控制
一 作用 用于版本的控制 二 内置的版本控制类 from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderV ...
- sql server中的孤立用户
此问题出现在数据库的移值上.移值后,数据库的登陆名和数据库用户名孤立,原数据中,用建立的用户名密码登陆可以访问数据库,但是移值后就不能访问了.而且如果您尝试向该登录帐户授予数据库访问权限,则会因该用户 ...
- (2.10)备份与还原--利用T-SQL进行备份还原
常用: /************ 一.数据库备份 ************/ with init,format,stats=1init:覆盖format:格式化备份集stats=1:显示进度条 ST ...
- mysql 约束条件 auto_increment 自动增长 创建表时设置自增字段
auto_increment mysql) )auto_increment; Query OK, rows affected (0.01 sec) mysql> show create tabl ...