golang xorm日志写入文件中的操作

golang访问数据库记录SQL语句:

使用的包为:

1:github.com/arthurkiller/rollingwriter //写入日志包

2: github.com/go-xorm/xorm //xorm包

具体实现为:

package main
import (
 "time"

 "github.com/arthurkiller/rollingwriter"
 _ "github.com/go-sql-driver/mysql"
 "github.com/go-xorm/xorm"
)

func main() {
 var conn string = "root:123456@tcp(127.0.0.1)/logsdemo?charset=utf-8"
 Engine, err := xorm.NewEngine("mysql", conn)
 if err != nil {
 panic("mysql connect fail")
 }
 config := rollingwriter.Config{
 LogPath: "./logs", //日志路径
 TimeTagFormat: "060102150405", //时间格式串
 FileName: "mysql_exec", //日志文件名
 MaxRemain: 3,  //配置日志最大存留数
 RollingPolicy: rollingwriter.VolumeRolling, //配置滚动策略 norolling t
 imerolling volumerolling
 RollingTimePattern: "* * * * * *",  //配置时间滚动策略
 RollingVolumeSize: "1M",   //配置截断文件下限大小
 WriterMode: "none",
 BufferWriterThershould: 256,
 // Compress will compress log file with gzip
 Compress: true,
 }

 writer, err := rollingwriter.NewWriterFromConfig(&config)
 if err != nil {
 panic(err)
 }

 var logger *xorm.SimpleLogger = xorm.NewSimpleLogger(writer)
 Engine.SetLogger(logger)
 Engine.ShowSQL(true)
 logger.Info("ts info code")
 Engine.Exec("select * from cp_order where id = ? ", 3)
 time.Sleep(1 * time.Second)

}

rollingwriter 实现一个 io.Writer传入到xorm.NewSimpleLogger 中 在xorm中实现日志的写入,在rollingwriter中保存日志到文件中

依赖包:https://github.com/robfig/cron

补充: golang xorm Model 模型文件模板

* Record.go

package models
import (
 "fmt"
 "github.com/go-xorm/xorm"
 "time"
)

// 用户首次登录
type FirstLoginRecord struct {
 Id int64 `xorm:"not null pk autoincr INT(11)"`
 UserID int64 `json:"userid" xorm:"int(11) not null 'userid'"`
 IP string `json:"logonip" xorm:"varchar(45) not null 'logonip'"`
 CreatedAt time.Time `json:"logontime" xorm:"timestamp not null 'logontime'"`
 UpdatedAt time.Time `json:"logofftime" xorm:"timestamp not null 'logofftime'"`
 Source int `json:"source" xorm:"tinyint(3) not null"`
 IsCharged int `json:"ischargeaccount" xorm:"tinyint(3) unsigned not null 'ischargeaccount'"`
}

func (*FirstLoginRecord) TableName() string {
 return "W_UserFirstLogonRec"
}

func (*FirstLoginRecord) DB() *xorm.Engine {
 return DbDefault()
}

func (t *FirstLoginRecord) Save() error {
 var err error
 var engine = t.DB()
 if t.Id == 0 {
 t.Id, err = engine.Insert(t)
 return err
 }
 var rowsAffected int64
 rowsAffected, err = engine.Id(t.Id).Update(t)
 fmt.Printf("@table: %s: %d rows affected", t.TableName(), rowsAffected)
 return err
}

// 用户id唯一约束
func (this *FirstLoginRecord) AddDistinct() error {
 var err error
 var engine = this.DB()
 var has bool
 var ent = FirstLoginRecord{UserID: this.UserID }
 has, err = engine.Get(&ent)
 if has {
 return nil
 }
 this.Id, err = engine.Insert(this)
 return err
}

http://www.xorm.io/docs/

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • golang 使用time包获取时间戳与日期格式化操作

    Time包定义的类型 Time: 时间类型, 包含了秒和纳秒以及 Location Month: type Month int 月份. 定义了十二个月的常量 const ( January Month = 1 + iota February March April May June July August September October November December ) Weekday 类型: type Weekday int 周 定义了一周的七天 const ( Sunday Wee

  • golang中xorm的基本使用说明

    简单的用法 package main import ( _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" "log" ) //定义结构体(xorm支持双向映射) type User struct { User_id int64 `xorm:"pk autoincr"` //指定主键并自增 Name string `xorm:"unique&quo

  • Golang中runtime的使用详解

    runtime 调度器是个非常有用的东西,关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行 NumCPU:返回当前系统的 CPU 核数量 GOMAXPROCS:设置最大的可同时使用的 CPU 核数 Goexit:退出当前 goroutine(但是defer语句会照常执行) NumGoroutine:返回正在执行和排队的任务总数 GOOS:目标操作系统 NumCPU package main import

  • golang xorm及time.Time自定义解决json日期格式的问题

    golang默认的time.Time类型在转为json格式时不是常用的2019-05-08 10:00:01这种格式,解决办法是自定义一个时间类型,例如 type myTime time.Time ,然后针对myTime实现Marshaler接口的MarshalJSON方法,例如: package models import ( "database/sql/driver" "time" ) const localDateTimeFormat string = &qu

  • Golang 定时器(Timer 和 Ticker),这篇文章就够了

    定时器是什么 Golang 原生 time 包下可以用来执行一些定时任务或者是周期性的任务的一个工具 本文基于 Go 1.14,如果以下文章有哪里不对或者问题的地方,欢迎讨论学习 定时器的日常使用 Timer 相关 func NewTimer(d Duration) *Timer func (t *Timer) Reset(d Duration) bool func (t *Timer) Stop() bool func After(d Duration) <-chan Time func Af

  • golang的time包:秒、毫秒、纳秒时间戳输出方式

    菜鸟的时候只知道时间戳有10位.13位.还有好长位数的. 入坑久了才明白 10位数的时间戳是以 秒 为单位: 13位数的时间戳是以 毫秒 为单位: 19位数的时间戳是以 纳秒 为单位: golang中可以这样写: package main import ( "time" "fmt" ) func main() { fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix()) fmt.Printf("时间戳(

  • golang xorm日志写入文件中的操作

    golang访问数据库记录SQL语句: 使用的包为: 1:github.com/arthurkiller/rollingwriter //写入日志包 2: github.com/go-xorm/xorm //xorm包 具体实现为: package main import ( "time" "github.com/arthurkiller/rollingwriter" _ "github.com/go-sql-driver/mysql" &quo

  • java异步写日志到文件中实现代码

    java异步写日志到文件中详解 实现代码: package com.tydic.ESUtil; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Properties; public class LogWriter { // 日志的配置文件 publi

  • Python+logging输出到屏幕将log日志写入文件

    日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数据).事件还具有开发者归因于事件的重要性:重要性也可以称为级别或严重性. logging提供了一组便利的函数,用来做简单的日志.它们是 debug(). info(). warning(). error() 和 critical(). logging函数根据它们用来跟踪的事件的级别或严重程度来命名.

  • 用golang如何替换某个文件中的字符串

    用golang实现了某个文件中字符的替换,替换为按行替换,执行后会生成新文件,如a.txt,执行后生成a.txt.mdf.新文件即修改后的内容. 主要用来练习文件的读取与写入 package main import ( "bufio" "fmt" "io" "os" "strings" ) func main() { if len(os.Args) != 4 { fmt.Println("lack

  • java_IO向文件中写入和读取内容代码实例

    使用java中OutStream()向文件中写入内容 package Stream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class OutStreamDemo01 { public static void main(Str

  • 将python运行结果保存至本地文件中的示例讲解

    一.建立文件,保存数据 1.使用python中内置的open函数 打开txt文件 #mode 模式 #w 只能操作写入 r 只能读取 a 向文件追加 #w+ 可读可写 r+可读可写 a+可读可追加 #wb+写入进制数据 #w模式打开文件,如果而文件中有数据,再次写入内容,会把原来的覆盖掉 file_handle=open('1.txt',mode='w') 2.向文件中写入数据 2.1 write写入 #\n 换行符 file_handle.write('hello word 你好 \n') 2

  • 使用PHP实现下载CSS文件中的图片

    作为一个资深并且专业的扒皮人员,在我从初三开始投入伟大的互联网中到现在积累了丰富的扒皮经验.我相信每个做web的程序员也都会有类似的经历. 在扒皮过程中,必不可少的需要下载样式文件中的图片.碰到比较庞大的样式文件,其中可能会有上百个需要下载的图片,那么使用下面这段小代码是最为合适的了. < ?php /* More & Original PHP Framwork Copyright (c) 2007 - 2008 IsMole Inc. Author: kimi Documentation:

  • 如何导出python安装的所有模块名称和版本号到文件中

    Python 模块 概念 python中的模块是什么?简而言之,在python中,一个文件(以".py"为后缀名的文件)就叫做一个模块,每一个模块在python里都被看做是一个独立的文件.模块可以被项目中的其他模块.一些脚本甚至是交互式的解析器所使用,它可以被其他程序引用,从而使用该模块里的函数等功能,使用Python中的标准库也是采用这种方法. 分类 在Python中模块分为以下几种: 系统内置模块,例如:sys.time.json模块等等: 自定义模块,自定义模块是自己写的模块,对

  • java如何通过FileOutputStream字节流向文件中写数据

    目录 通过FileOutputStream字节流向文件中写数据 java 字节流向文件中写入指定内容 字符流 就像这样 字符流则是 总结 通过FileOutputStream字节流向文件中写数据 使用FileOutputStream写入文件的总体过程为 用File存放文件地址 用FileOutputStream打开输出流 用write函数写入数据 close函数关闭输出流 用File打开本地文件() //第一步 用File打开本地文件 File f = new File("C:\\my_file

  • C++ txt 文件读取,并写入结构体中的操作

    如下所示: wang 18 001 li 19 002 zhao 20 003 代码如下: #include <string> #include <iostream> #include <fstream> using namespace std; struct people { string name; int age; string id; }p[20]; int main() { int n = 0; ifstream in( "a.txt" ,

随机推荐