我一直在这里查看与上下文日志记录相关的示例: Logging Cookbook
但是,我无法使以下示例正常工作。该示例应演示自定义适配器的使用,并继续如下操作:
# Here is a simple example:
class CustomAdapter(logging.LoggerAdapter):
"""
This example adapter expects the passed in dict-like object to have a
'connid' key, whose value in brackets is prepended to the log message.
"""
def process(self, msg, kwargs):
return '[%s] %s' % (self.extra['connid'], msg), kwargs
# which you can use like this:
logger = logging.getLogger(__name__)
adapter = CustomAdapter(logger, {'connid': some_conn_id})
# Then any events that you log to the adapter will have the value of some_conn_id …Run Code Online (Sandbox Code Playgroud) 我有两个文件namley main.py和my_modules.py。在main.py中,我定义了两个这样的记录器
#main.py
URL_LOGS = "logs/urls.log"
GEN_LOGS = 'logs/scrape.log'
#Create two logger files
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s', datefmt="%Y-%m-%d %H:%M:%S")
# first file logger
url_info_logger = logging.getLogger('URL_Fetcher')
hdlr_1 = logging.FileHandler(URL_LOGS)
hdlr_1.setFormatter(formatter)
url_info_logger.setLevel(logging.DEBUG)
url_info_logger.addHandler(hdlr_1)
#second Logger
general_logger = logging.getLogger("GENERAL")
hdlr_2 = logging.FileHandler(GEN_LOGS)
hdlr_2.setFormatter(formatter)
general_logger.setLevel(logging.DEBUG)
general_logger.addHandler(hdlr_2)
module1()
do_something()
Run Code Online (Sandbox Code Playgroud)
在第二个文件(my_modules.py)中,我必须同时使用两个记录器,以下是my_modules.py的示例代码。
#my_modules.py
import logging
def module1():
general_logger.info("Logger Module1")
url_info_logger.info("New URL found")
def do_something():
general_logger.info("Logger Module2")
url_info_logger.info("Url parsed")
Run Code Online (Sandbox Code Playgroud)
我如何实现要在my_modules.py中访问的记录器
我正在为固件原型编写可重用的日志记录模块.我有一个记录器api,它有一个包装函数void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
在此包装函数中,将调用特定于系统的写入函数.可以是UART,例如显示驱动程序......
所有系统写入/发送功能都需要以消息的字节长度为单位.而我的包装器函数只获取它应该发送的消息的char*.例如,请参阅此处,我的包装器调用系统UART传输功能:
void LogWithNum(eLogSubSystem sys, eLogLevel level, char * msg, int * number)
{
UARTDRV_Transmit(handle, char * msg, int msglen);
}
Run Code Online (Sandbox Code Playgroud)
我如何得出任何消息的长度,以便我可以将其正确传递给底层传输函数?
我不想使用大型图书馆,因为我在uC上并希望节省空间.
我正在使用基于docker镜像的docker容器tomcat:7-jre8.Tomcat在前台运行,并且catalina日志被发送到stdout.该文件catalina.out不包含任何日志.我想将日志重定向stdout到文件catalina.out,因为我想将日志存储在docker容器之外.我正在主机上使用挂载卷.
使用以下命令启动Tomcat Dockerfile:
CMD ["bin/catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)
你能给我一些如何将日志重定向到文件的提示吗?
我尝试用bin/startup.sh脚本运行tomcat ,但它不起作用.服务正确吗?
我写了这个小函数来登录文件
func logMessage(message string) {
file, err := os.OpenFile("my.log", O_CREATE|O_RDWR|O_APPEND, 0)
if err != nil {
panic(err)
}
defer file.Close()
log.SetOutput(file)
log.Println(message)
}
Run Code Online (Sandbox Code Playgroud)
但我不明白的是为什么
logMessage("foo")
logMessage("bar")
Run Code Online (Sandbox Code Playgroud)
将此内容写入文件:
2017/03/21 03:34:42 foo
2017/03/21 03:34:42 bar
Run Code Online (Sandbox Code Playgroud)
我可以不写YYYY/MM/DD HH:II:SS吗?
我想记录案例类创建,但似乎没有像postCreate()方法可用的东西.有没有办法在Scala中记录案例类创建?
谢谢.
我正在尝试使用logging.config.dictConfig()配置我的Python日志记录模块
但是,我的JSON文件似乎已损坏,即使它作为Python dict false更改为False,所以我不认为这是一个语法错误.
我的代码说:
import json
with open('logging_config.json') as f:
d = json.load(f)
Run Code Online (Sandbox Code Playgroud)
我的logging_config.json档案是:
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"standard": {
"format": "[%(levelname)s] %(name)s: %(message)s"
},
},
"handlers": {
"default": {
"level": "DEBUG",
"formatter": "standard",
"class": "logging.StreamHandler",
},
},
"loggers": {
"": {
"handlers": ["default"],
"level": "INFO",
"propagate": true
},
"myfunc": {
"handlers": ["default"],
"level": "DEBUG",
"propagate": false
},
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个简单的程序时,我收到一个错误: json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: …
内置的log和log.Logger不提供Error或Warning方法,如Python.
所以我想Logger使用以下代码为内置类型编写一个:
func (l *Logger) Error(v interface{}) {
info := fmt.Sprintf("ERROR: %v", v)
l.Println(info)
}
Run Code Online (Sandbox Code Playgroud)
我把上面的代码放在一个文件morelog.go下面GOPATH/src/log.
在main.go我写的:
logger := log.New(os.Stdout, "Test", 1)
logger.Error("Error in main.")
Run Code Online (Sandbox Code Playgroud)
当我跑步时go build,我得到:
./main.go:124: logger.Error undefined (type *log.Logger has no field or method Error)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过定义一个新类型并在该类型上定义方法来实现类似的目标.但我认为如果我可以将方法直接添加到buit-in类型可能会更好.
我想在比赛期间阅读英雄联盟聊天并将其全部记录到文件中.虽然我没有任何想法如何实际连接到服务器和阅读聊天.
有没有人有链接或想法如何实现这一目标?
问候
该库将以不同的,有时是专有的格式接收日志文件(tomcat和其他的访问日志),并且应该解析它们并提取某些字段 - 如时间戳,ip等...
开源或专有解决方案都是可以接受的.