Skip to content

Commit a76fa9c

Browse files
committed
feat: adding logn zip, used to automate zip your log every month
1 parent 7c97359 commit a76fa9c

File tree

2 files changed

+177
-0
lines changed

2 files changed

+177
-0
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ os.Setenv("logn_default_loc", "Asia/Jakarta") // timezone in log
3232
os.Setenv("tg_send", "true") // set true, if you need report log type warning & error to telegam
3333
os.Setenv("tg_token", "1416xxxxx:AAF3VOBjt7rIeO4tUL_dHxG0qxxxxxxxxx") // tg bot token
3434
os.Setenv("tg_chat_id", "-4121xxxx") // tg grup / chat_id
35+
os.Setenv("is_zipped", "true") // if you need to zip your log every month
36+
os.Setenv("logn_dir_zip", "log_zip/") // set directory to save your log
37+
```
38+
39+
Set this in main func.
40+
41+
```go
42+
logn.CronZip() // this command used to run zip log with cronjob
3543
```
3644

3745
## Usage
@@ -42,6 +50,13 @@ logn.WarningLog("this is log warning")
4250
logn.ErrorLog("this is log error")
4351
```
4452

53+
#### To run zip with cron
54+
55+
```script
56+
./app logn_zip_run // add this args in first args
57+
58+
```
59+
4560
## Contributing
4661

4762
Thank you for considering contributing to the Logn!.

logn.go

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package logn
22

33
import (
4+
"archive/zip"
5+
"errors"
46
"fmt"
7+
"io/ioutil"
58
"log"
69
"net/http"
710
"net/url"
811
"os"
912
"runtime"
13+
"strconv"
1014
"strings"
1115
"time"
1216
)
@@ -135,6 +139,9 @@ func makeLog(typeLogs int, title string, logMessage interface{}, loc string) err
135139
if typeLog != "info" && isSendTg == "true" {
136140
sendTg(url.QueryEscape(logMessageTg))
137141
}
142+
143+
makeZip()
144+
138145
return nil
139146
}
140147

@@ -204,3 +211,158 @@ func filePath(original string) string {
204211
return original[i+1:]
205212
}
206213
}
214+
215+
// CronZip used for cron zipped log
216+
func CronZip() error {
217+
if len(os.Args) == 2 {
218+
if os.Args[1] == "logn_zip_run" {
219+
err := makeZip()
220+
if err != nil {
221+
return err
222+
}
223+
}
224+
}
225+
226+
return nil
227+
}
228+
229+
func makeZip() error {
230+
var dirZip, isZipped, dir string
231+
232+
if len(os.Getenv("logn_dir")) != 0 {
233+
dir = os.Getenv("logn_dir")
234+
} else {
235+
dir = "log/"
236+
}
237+
238+
if len(os.Getenv("logn_dir_zip")) != 0 {
239+
dirZip = os.Getenv("logn_dir_zip")
240+
} else {
241+
dirZip = "log_zip/"
242+
}
243+
244+
if len(os.Getenv("is_zipped")) != 0 {
245+
isZipped = os.Getenv("is_zipped")
246+
} else {
247+
isZipped = "false"
248+
}
249+
250+
year, err := timeNow("Y")
251+
if err != nil {
252+
return err
253+
}
254+
255+
month, err := timeNow("M")
256+
if err != nil {
257+
return err
258+
}
259+
260+
day, err := timeNow("D")
261+
if err != nil {
262+
return err
263+
}
264+
265+
if day == "01" && isZipped == "true" {
266+
267+
monthInt, err := strconv.Atoi(month)
268+
if err != nil {
269+
return err
270+
}
271+
272+
prevMonth := monthInt - 1
273+
274+
if month == "01" {
275+
prevMonth = 12
276+
277+
yearInt, err := strconv.Atoi(year)
278+
if err != nil {
279+
return err
280+
}
281+
282+
prevYear := yearInt - 1
283+
284+
year = strconv.Itoa(prevYear)
285+
}
286+
287+
dirFile := dirZip + year
288+
289+
_, errYear := os.Stat(dirFile)
290+
if os.IsNotExist(errYear) {
291+
errDir := os.MkdirAll(dirFile, 0755)
292+
if errDir != nil {
293+
return errDir
294+
}
295+
}
296+
297+
filename := fmt.Sprintf("log_%s_%s.zip", year, strconv.Itoa(prevMonth))
298+
299+
baseDir := dir + year + "/" + strconv.Itoa(prevMonth) + "/"
300+
_, errYear = os.Stat(baseDir)
301+
if os.IsNotExist(errYear) {
302+
return errors.New("base dir doesn't exists")
303+
}
304+
305+
outDir := dirFile + "/" + filename
306+
307+
err = zipWriter(baseDir, outDir)
308+
if err != nil {
309+
fmt.Println(err.Error())
310+
}
311+
}
312+
313+
return nil
314+
}
315+
316+
func zipWriter(baseDir, outDir string) error {
317+
outFile, err := os.Create(outDir)
318+
if err != nil {
319+
return err
320+
}
321+
defer outFile.Close()
322+
323+
w := zip.NewWriter(outFile)
324+
325+
err = addFiles(w, baseDir, "")
326+
if err != nil {
327+
return err
328+
}
329+
330+
err = w.Close()
331+
if err != nil {
332+
return err
333+
}
334+
335+
return nil
336+
}
337+
338+
func addFiles(w *zip.Writer, basePath, baseInZip string) error {
339+
files, err := ioutil.ReadDir(basePath)
340+
if err != nil {
341+
return err
342+
}
343+
344+
for _, file := range files {
345+
fmt.Println(basePath + file.Name())
346+
if !file.IsDir() {
347+
dat, err := ioutil.ReadFile(basePath + file.Name())
348+
if err != nil {
349+
return err
350+
}
351+
352+
f, err := w.Create(baseInZip + file.Name())
353+
if err != nil {
354+
return err
355+
}
356+
_, err = f.Write(dat)
357+
if err != nil {
358+
return err
359+
}
360+
} else if file.IsDir() {
361+
newBase := basePath + file.Name() + "/"
362+
363+
addFiles(w, newBase, baseInZip+file.Name()+"/")
364+
}
365+
}
366+
367+
return nil
368+
}

0 commit comments

Comments
 (0)