u
This commit is contained in:
1 parent
a917be08d1
commit
a9ea500cd4
12 files changed
+18209
-21
No files matched your search
@@ -1,33 +1,44 @@
|
||||
import pandas as pd
|
||||
import random
|
||||
import string
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# 配置
|
||||
rows = 10000
|
||||
cols = 20
|
||||
rows = 4000
|
||||
|
||||
# 生成列名
|
||||
columns = [f"列{i+1}" for i in range(cols)]
|
||||
# 列名
|
||||
columns = ["箱号", "箱型", "制造日期"]
|
||||
|
||||
# 箱型列表
|
||||
container_types = ["20GP", "40GP", "40HQ", "45HQ"]
|
||||
|
||||
# 随机日期函数(生成 2000-01-01 到 2024-12-31)
|
||||
def random_date():
|
||||
start_date = datetime(2000, 1, 1)
|
||||
end_date = datetime(2024, 12, 31)
|
||||
delta = end_date - start_date
|
||||
rand_days = random.randint(0, delta.days)
|
||||
return (start_date + timedelta(days=rand_days)).strftime("%Y-%m-%d")
|
||||
|
||||
# 随机生成箱号(4字母 + 7数字)
|
||||
def random_conno():
|
||||
prefix = ''.join(random.choices(string.ascii_uppercase, k=4))
|
||||
number = ''.join(random.choices(string.digits, k=7))
|
||||
return prefix + number
|
||||
|
||||
# 生成数据
|
||||
data = []
|
||||
for _ in range(rows):
|
||||
row = []
|
||||
for _ in range(cols):
|
||||
# 随机数字或者随机字符串
|
||||
if random.random() < 0.5:
|
||||
row.append(random.randint(1, 10000)) # 随机数字
|
||||
else:
|
||||
row.append(''.join(random.choices(string.ascii_uppercase, k=5))) # 随机5个字母
|
||||
data.append(row)
|
||||
for i in range(rows):
|
||||
箱号 = random_conno()
|
||||
箱型 = random.choice(container_types)
|
||||
制造日期 = random_date()
|
||||
|
||||
data.append([箱号, 箱型, 制造日期])
|
||||
|
||||
# 创建 DataFrame
|
||||
df = pd.DataFrame(data, columns=columns)
|
||||
|
||||
# 保存 Excel
|
||||
df.to_excel("随机20列10000行.xlsx", index=False)
|
||||
|
||||
# 或者保存 CSV
|
||||
df.to_csv("随机20列10000行.csv", index=False, encoding='utf-8-sig')
|
||||
# 保存 Excel 和 CSV
|
||||
df.to_excel("箱数据4000行2.xlsx", index=False)
|
||||
df.to_csv("箱数据4000行2.csv", index=False, encoding="utf-8-sig")
|
||||
|
||||
print("生成完成!")
|
||||
File renamed without changes.
File diff suppressed because it is too large.
Load diff
Binary file not shown.
File diff suppressed because it is too large.
Load diff
Binary file not shown.
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -32,7 +32,7 @@ func InitLog() {
|
||||
}
|
||||
}
|
||||
|
||||
logger := hertzzap.NewLogger(hertzzap.WithZapOptions(zap.AddCaller(), zap.AddCallerSkip(3)))
|
||||
logger := hertzzap.NewLogger(hertzzap.WithCores([]hertzzap.CoreConfig{}))
|
||||
|
||||
lumberjackLogger := &lumberjack.Logger{
|
||||
Filename: fileName,
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
type Option interface {
|
||||
apply(cfg *config)
|
||||
}
|
||||
|
||||
type ExtraKey string
|
||||
|
||||
type option func(cfg *config)
|
||||
|
||||
func (fn option) apply(cfg *config) {
|
||||
fn(cfg)
|
||||
}
|
||||
|
||||
type CoreConfig struct {
|
||||
Enc zapcore.Encoder
|
||||
Ws zapcore.WriteSyncer
|
||||
Lvl zapcore.LevelEnabler
|
||||
}
|
||||
|
||||
type config struct {
|
||||
extraKeys []ExtraKey
|
||||
coreConfigs []CoreConfig
|
||||
zapOpts []zap.Option
|
||||
extraKeyAsStr bool
|
||||
}
|
||||
|
||||
// defaultCoreConfig default zapcore config: json encoder, atomic level, stdout write syncer
|
||||
func defaultCoreConfig() *CoreConfig {
|
||||
// default log encoder
|
||||
enc := zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
|
||||
// default log level
|
||||
lvl := zap.NewAtomicLevelAt(zap.InfoLevel)
|
||||
// default write syncer stdout
|
||||
ws := zapcore.AddSync(os.Stdout)
|
||||
|
||||
return &CoreConfig{
|
||||
Enc: enc,
|
||||
Ws: ws,
|
||||
Lvl: lvl,
|
||||
}
|
||||
}
|
||||
|
||||
// defaultConfig default config
|
||||
func defaultConfig() *config {
|
||||
return &config{
|
||||
coreConfigs: []CoreConfig{*defaultCoreConfig()},
|
||||
zapOpts: []zap.Option{},
|
||||
extraKeyAsStr: false,
|
||||
}
|
||||
}
|
||||
|
||||
// WithCoreEnc zapcore encoder
|
||||
func WithCoreEnc(enc zapcore.Encoder) Option {
|
||||
return option(func(cfg *config) {
|
||||
cfg.coreConfigs[0].Enc = enc
|
||||
})
|
||||
}
|
||||
|
||||
// WithCoreWs zapcore write syncer
|
||||
func WithCoreWs(ws zapcore.WriteSyncer) Option {
|
||||
return option(func(cfg *config) {
|
||||
cfg.coreConfigs[0].Ws = ws
|
||||
})
|
||||
}
|
||||
|
||||
// WithCoreLevel zapcore log level
|
||||
func WithCoreLevel(lvl zap.AtomicLevel) Option {
|
||||
return option(func(cfg *config) {
|
||||
cfg.coreConfigs[0].Lvl = lvl
|
||||
})
|
||||
}
|
||||
|
||||
// WithCores zapcore
|
||||
func WithCores(coreConfigs ...CoreConfig) Option {
|
||||
return option(func(cfg *config) {
|
||||
cfg.coreConfigs = coreConfigs
|
||||
})
|
||||
}
|
||||
|
||||
// WithZapOptions add origin zap option
|
||||
func WithZapOptions(opts ...zap.Option) Option {
|
||||
return option(func(cfg *config) {
|
||||
cfg.zapOpts = append(cfg.zapOpts, opts...)
|
||||
})
|
||||
}
|
||||
|
||||
// WithExtraKeys allow you log extra values from context
|
||||
func WithExtraKeys(keys []ExtraKey) Option {
|
||||
return option(func(cfg *config) {
|
||||
for _, k := range keys {
|
||||
if !InArray(k, cfg.extraKeys) {
|
||||
cfg.extraKeys = append(cfg.extraKeys, k)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// WithExtraKeyAsStr convert extraKey to a string type when retrieving value from context
|
||||
// Not recommended for use, only for compatibility with certain situations
|
||||
//
|
||||
// For more information, refer to the documentation at
|
||||
// `https://pkg.go.dev/context#WithValue`
|
||||
func WithExtraKeyAsStr() Option {
|
||||
return option(func(cfg *config) {
|
||||
cfg.extraKeyAsStr = true
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
// Copyright 2022 CloudWeGo Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package log
|
||||
|
||||
import (
|
||||
"github.com/cloudwego/hertz/pkg/common/hlog"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// InArray check if a string in a slice
|
||||
func InArray(key ExtraKey, arr []ExtraKey) bool {
|
||||
for _, k := range arr {
|
||||
if k == key {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func hLevelToZapLevel(level hlog.Level) zapcore.Level {
|
||||
var lvl zapcore.Level
|
||||
switch level {
|
||||
case hlog.LevelTrace, hlog.LevelDebug:
|
||||
lvl = zap.DebugLevel
|
||||
case hlog.LevelInfo:
|
||||
lvl = zap.InfoLevel
|
||||
case hlog.LevelWarn, hlog.LevelNotice:
|
||||
lvl = zap.WarnLevel
|
||||
case hlog.LevelError:
|
||||
lvl = zap.ErrorLevel
|
||||
case hlog.LevelFatal:
|
||||
lvl = zap.FatalLevel
|
||||
default:
|
||||
lvl = zap.WarnLevel
|
||||
}
|
||||
return lvl
|
||||
}
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"cn/oneao/base-go/db"
|
||||
"cn/oneao/base-go/log"
|
||||
"cn/oneao/base-go/utils/idgen"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
"github.com/cloudwego/hertz/pkg/common/hlog"
|
||||
"github.com/hertz-contrib/requestid"
|
||||
)
|
||||
|
||||
@@ -29,6 +29,15 @@ func main() {
|
||||
|
||||
log.InitLog()
|
||||
|
||||
type User struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
|
||||
u := User{"tom", 20}
|
||||
|
||||
hlog.Info(u)
|
||||
|
||||
register(h)
|
||||
h.Spin()
|
||||
}
|
||||
Reference in new issue
Block a user