Go语言中日志处理,log包的使用

Golang提供了原生日志库“log”,使用简单方便,本文以代码为例进行说明介绍。

package main

import (
    "os"
    "log"
    "fmt"
)

func main() {
    // 打开日志文件
    // 第二个参数为打开文件的模式,可选如下:
    /*
    O_RDONLY // 只读模式打开文件
        O_WRONLY // 只写模式打开文件
        O_RDWR   // 读写模式打开文件
        O_APPEND // 写操作时将数据附加到文件尾部
        O_CREATE // 如果不存在将创建一个新文件
        O_EXCL   // 和O_CREATE配合使用,文件必须不存在
        O_SYNC   // 打开文件用于同步I/O
        O_TRUNC  // 如果可能,打开时清空文件
     */
     // 第三个参数为文件权限,请参考linux文件权限,664在这里为八进制,代表:rw-rw-r--
    logFile, err := os.OpenFile("e:/go.log", os.O_WRONLY | os.O_CREATE | os.O_APPEND, 0644)
    if err != nil {
        log.Fatal(err)
    }

    // 第一个参数为输出io,可以是文件也可以是实现了该接口的对象,此处为日志文件;第二个参数为自定义前缀;第三个参数为输出日志的格式选项,可多选组合
    // 第三个参数可选如下:
    /*
    Ldate         = 1             // 日期:2009/01/23
        Ltime         = 2             // 时间:01:23:23
        Lmicroseconds = 4             // 微秒分辨率:01:23:23.123123(用于增强Ltime位)
        Llongfile     = 8             // 文件全路径名+行号: /a/b/c/d.go:23
        Lshortfile    = 16            // 文件无路径名+行号:d.go:23(会覆盖掉Llongfile)
        LstdFlags     = Ldate | Ltime // 标准logger的初始值
     */
    debugLog := log.New(logFile, "[debug]", log.Ldate|log.Ltime|log.Llongfile)

    // 日志输出
    debugLog.Print("日志测试Print输出,处理同fmt.Print")
    debugLog.Println("日志测试Println输出,处理同fmt.Println")
    debugLog.Printf("日志测试%s输出,处理同fmt.Printf", "Printf")

    // 日志输出,同时直接终止程序,后续的操作都不会执行
    debugLog.Fatal("日志测试Fatal输出,处理等价于:debugLog.Print()后,再执行os.Exit(1)")
    debugLog.Fatalln("日志测试Fatalln输出,处理等价于:debugLog.Println()后,再执行os.Exit(1)")
    debugLog.Fatalf("日志测试%s输出,处理等价于:debugLog.Print()后,再执行os.Exit(1)", "Fatalf")

    // 日志输出,同时抛出异常,可用recover捕捉
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("===========", r)
        }
    }()
    debugLog.Panic("日志测试Panic输出,处理等价于:debugLog.Print()后,再执行Panic()")
    debugLog.Panicln("日志测试Panicln输出,处理等价于:debugLog.Println()后,再执行Panic()")
    debugLog.Panicf("日志测试%s输出,处理等价于:debugLog.Printf()后,再执行Panic()", "Panicf")

    fmt.Println("前缀为:", debugLog.Prefix())    // 前缀为: [debug]
    fmt.Println("输出选项为:", debugLog.Flags()) // 输出选项为: 11
    // 设置前缀
    debugLog.SetPrefix("[info]")
    // 设置输出选项
    debugLog.SetFlags(log.LstdFlags)
    fmt.Println("前缀为:", debugLog.Prefix())    // 前缀为: [info]
    fmt.Println("输出选项为:", debugLog.Flags()) // 输出选项为: 3
}

说明:以上代码执行时要分段注释后执行,否则执行到:

debugLog.Fatal("日志测试Fatal输出,处理等价于:debugLog.Print()后,再执行os.Exit(1)")

便会终止

原文地址:http://blog.51cto.com/634435/2113146

时间: 2024-10-17 22:14:16

Go语言中日志处理,log包的使用的相关文章

在Java语言中调用存储过程、存储函数、包头、包体

需要拷贝连接Oracle的jar包,路径如下图所示: 连接Oracle数据库的代码: package demo.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static Stri

Golang学习笔记--log包

个人站:http://www.cloudnoter.com/?p=137 一.快速使用 Golang的log包短小精悍,可以非常轻松的实现日志打印转存功能.不用多说,log支持并发操作(即协程安全-相对于JAVA中的线程安全而言),其结构定义如下: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write a

R中常用数据挖掘算法包

数据挖掘主要分为4类,即预测.分类.聚类和关联,根据不同的挖掘目的选择相应的算法.下面对R语言中常用的数据挖掘包做一个汇总: 连续因变量的预测: stats包 lm函数,实现多元线性回归 stats包 glm函数,实现广义线性回归 stats包 nls函数,实现非线性最小二乘回归 rpart包 rpart函数,基于CART算法的分类回归树模型 RWeka包 M5P函数,模型树算法,集线性回归和CART算法的优点 adabag包 bagging函数,基于rpart算法的集成算法 adabag包 b

在Go语言中记录log:seelog包

前两周调bug调的吐血,虽然解决了但是还是挺浪费时间的.跟同事聊了聊,觉得我们现在项目中的日志记录太少了,导致出了问题不知道怎么下手,还得自己改代码记录日志,然后排查问题.这样如果将来还有bug的话还得这么调,很麻烦,让我深入看一下go语言中如何记录日志(好吧我最近就跟日志耗上了). 根据python的经验和目前项目中的要求,我对日志的要求有两个: 一是定义日志级别,可以记录debug/warning/error之类的不同级别的日志,这样的话,在通常正常运行的时候,就只需要记录一下运行状态,而报

在idea中如何添加log日志

1.首先下载log4的jar包,官方路径为:http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip 2.下载完成后,把jar包导入到idea中,参考文档:http://jingyan.baidu.com/article/fec7a1e5f79e2b1191b4e74f.html 3.之后参考log4使用教程,参考链接:http://www.codeceo.com/article/log4j-usage.

mysql中slow query log慢日志查询分析

在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析每条sql执行的状态与性能从而进行优化了. 一.慢查询日志 配置 开启慢查询日志 , 配置样例: /etc/mysql/my.cnf[mysqld]log-slow-queries 在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效.慢查询 日志将写入参数 DATADIR (数据目录:/var/lib/mysql

Lua语言基础汇总(11) -- Lua中的模块与包

前言 从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包.require用于使用模块,module用于创建模块.简单的说,一个模块就是一个程序库,可以通过require来加载.然后便得到了一个全局变量,表示一个table.这个table就像是一个命名空间,其内容就是模块中导出的所有东西,比如函数和常量,一个符合规范的模块还应使require返回这个table.现在就来具体的总结一下require和module这两个函数. require函

ROS中的日志(log)消息

学会使用日志(log)系统,做ROS大型项目的主治医生 通过显示进程的运行状态是好的习惯,但需要确定这样做不会影响到软件的运行效率和输出的清晰度.ROS 日志 (log) 系统的功能就是让进程生成一些日志消息,显示在屏幕上.发送到特定 topic 或者储存在特定 log 文档中,以方便调试.记录.报警等.下面简单介绍如何生成和查看日志消息. 日志消息 在ROS中,有一个特殊的话题叫作/rosout,它承载着所有节点的所有日志消息./rosout消息的类型是rosgraph_msgs/Log: r

Ubuntu中没有/var/log/messages日志

在Ubuntu中没有/var/log/messages,Ubuntu中对应的应该是/etc/rsyslog.conf和rsyslogd. 解决方法:用vim打开/etc/rsyslog.d/50-default.conf文件末尾增加一行内容如下:*.info;mail.none;authpriv.none;cron.none /var/log/messages然后保存:按ESC,然后:wq:在重启系统 ,然后查看.var/log/messages就有了