<commit_before># 12.1 应用日志
我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来，Go语言中提供了一个简易的log包，我们使用该包可以方便的实现日志记录的功能，这些日志都是基于fmt包的打印再结合panic之类的函数来进行一般的打印、抛出错误处理。Go目前标准包只是包含了简单的功能，如果我们想把我们的应用日志保存到文件，然后又能够结合日志实现很多复杂的功能（编写过Java或者C++的读者应该都使用过log4j和log4cpp之类的日志工具），可以使用第三方开发的日志系统:[logrus](https://github.com/sirupsen/logrus)和[seelog](https://github.com/cihub/seelog)，它们实现了很强大的日志功能，可以结合自己项目选择。接下来我们介绍如何通过该日志系统来实现我们应用的日志功能。

## logrus介绍
logrus是用Go语言实现的一个日志系统，与标准库log完全兼容并且核心API很稳定,是Go语言目前最活跃的日志库

首先安装logrus
```Go

go get -u github.com/sirupsen/logrus

```	

简单例子:

```Go

package main

import (
	log "github.com/Sirupsen/logrus"
)

func main() {
log.WithFields(log.Fields{
	"animal": "walrus",
}).Info("A walrus appears")
}
```
### 基于logrus的自定义日志处理
```Go

package main

import (<commit_msg>Update 12.1.md<commit_after># 12.1 应用日志
我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来，Go语言中提供了一个简易的log包，我们使用该包可以方便的实现日志记录的功能，这些日志都是基于fmt包的打印再结合panic之类的函数来进行一般的打印、抛出错误处理。Go目前标准包只是包含了简单的功能，如果我们想把我们的应用日志保存到文件，然后又能够结合日志实现很多复杂的功能（编写过Java或者C++的读者应该都使用过log4j和log4cpp之类的日志工具），可以使用第三方开发的日志系统:[logrus](https://github.com/sirupsen/logrus)和[seelog](https://github.com/cihub/seelog)，它们实现了很强大的日志功能，可以结合自己项目选择。接下来我们介绍如何通过该日志系统来实现我们应用的日志功能。

## logrus介绍
logrus是用Go语言实现的一个日志系统，与标准库log完全兼容并且核心API很稳定,是Go语言目前最活跃的日志库

首先安装logrus
```Go

go get -u github.com/sirupsen/logrus

```	

简单例子:

```Go

package main

import (
	log "github.com/Sirupsen/logrus"
)

func main() {
	log.WithFields(log.Fields{
		"animal": "walrus",
	}).Info("A walrus appears")
}
```
### 基于logrus的自定义日志处理
```Go

package main

import (
{'fraction_non_alphanumeric': 0.12774193548387097, 'fraction_numerical': 0.008387096774193548, 'mean_word_length': 8.878980891719745, 'pattern_counts': {'":': 2, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3127202', 'n_tokens_mistral': 1059, 'n_tokens_neox': 1174, 'n_words': 65}