我正在使用Python的日志记录模块将一些调试字符串记录到一个非常好的文件中.现在另外,我想使用这个模块也将字符串打印到stdout.我该怎么做呢?为了将我的字符串记录到文件,我使用以下代码:
import logging
import logging.handlers
logger = logging.getLogger("")
logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
LOGFILE, maxBytes=(1048576*5), backupCount=7
)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
Run Code Online (Sandbox Code Playgroud)
然后调用一个记录器函数
logger.debug("I am written to the file")
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我在网上发现了一些通常有效的代码,但我想在同一个程序中多次使用它(将不同的东西写入不同的文件,同时仍然一直打印到屏幕上).
也就是说,当它关闭时,我认为sys.stdout关闭,所以打印完全,并再次使用这个类失败.我尝试重新导入sys和其他愚蠢的东西,但我无法让它工作.
这是该网站,代码为groups.google.com/group/comp.lang.python/browse_thread/thread/d25a9f5608e473af/
import sys
class MyWriter:
def __init__(self, stdout, filename):
self.stdout = stdout
self.logfile = file(filename, 'a')
def write(self, text):
self.stdout.write(text)
self.logfile.write(text)
def close(self):
self.stdout.close()
self.logfile.close()
writer = MyWriter(sys.stdout, 'log.txt')
sys.stdout = writer
print 'test'
Run Code Online (Sandbox Code Playgroud) 我正在使用PyCharm在Mac OS X中开发GAE应用程序.有没有办法在PyCharm的运行控制台中显示颜色?
我已经设置了一个处理器来输出ansi格式的颜色.然后,我添加了处理程序:
LOG = logging.getLogger()
LOG.setLevel(logging.DEBUG)
for handler in LOG.handlers:
LOG.removeHandler(handler)
LOG.addHandler(ColorHandler())
LOG.info('hello!')
LOG.warning('hello!')
LOG.debug('hello!')
LOG.error('hello!')
Run Code Online (Sandbox Code Playgroud)
但颜色是一样的.

编辑:
JetBrains 问题跟踪器的响应:将片段的第55行从sys.stderr更改为sys.stdout.stderr流总是用红色着色而stdout不是.
现在颜色正确显示.
我有一个我运行的Python Spark程序spark-submit.我想把日志语句放在其中.
logging.info("This is an informative message.")
logging.debug("This is a debug message.")
Run Code Online (Sandbox Code Playgroud)
我想使用Spark正在使用的相同记录器,以便日志消息以相同的格式出现,并且级别由相同的配置文件控制.我该怎么做呢?
我已经尝试将logging语句放在代码中并以a开头logging.getLogger().在这两种情况下,我都看到Spark的日志消息,但不是我的.我一直在关注Python日志记录文档,但还是无法从中找到它.
不确定这是否是提交给Spark的脚本特有的,或者我不了解日志记录的工作原理.
我正在尝试使用标准库来调试我的代码:
这很好用:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('message')
Run Code Online (Sandbox Code Playgroud)
我无法为较低级别的记录器工作:
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info('message')
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('message')
Run Code Online (Sandbox Code Playgroud)
我没有得到任何回应.
好的.我已经完成了我的第一个python程序.它有大约1000行代码.在开发期间,我print在运行命令之前放置了大量语句,os.system()
例如,
print "running command",cmd
os.system(cmd)
Run Code Online (Sandbox Code Playgroud)
现在我已经完成了这个计划.我考虑过对它们进行评论,但重定向所有这些不必要的打印(我无法删除所有print语句 - 因为有些语句为用户提供有用的信息)到日志文件中会更有用吗?任何技巧或提示.
我正在使用TensorFlow-Slim,它有一些有用的日志记录打印到控制台tf.logging.我想将这些记录重定向到文本文件,但找不到这样做的方法.我查看了tf_logging.py源代码,它公开了以下内容,但似乎没有将日志写入文件的选项.如果我错过了什么,请告诉我.
__all__ = ['log', 'debug', 'error', 'fatal', 'info', 'warn', 'warning',
'DEBUG', 'ERROR', 'FATAL', 'INFO', 'WARN',
'flush', 'log_every_n', 'log_first_n', 'vlog',
'TaskLevelStatusMessage', 'get_verbosity', 'set_verbosity']
Run Code Online (Sandbox Code Playgroud) 我正在研究Django REST 框架,我希望有单独的文件来记录数据。
我想要一个用于简单事务的文件,例如 GET、PUT、POST 等,以及一个包含错误的文件,我将在发生错误时收集这些错误。
我一直在阅读Django Logging Documentation并且我想出了一些关于如何记录信息数据的配置。配置示例如下:
设置.py
STATIC_URL = '/static/'
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
LOGGING_ROOT = os.path.join(STATIC_ROOT, 'logging')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': LOGGING_ROOT + "/info.log",
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
},
}
Run Code Online (Sandbox Code Playgroud)
它作为文件中的预期数据样本工作:
"PUT /upload/dat.txt HTTP/1.1" 204 14
"OPTIONS / HTTP/1.1" 200 10020
"GET / HTTP/1.1" 200 9916
Run Code Online (Sandbox Code Playgroud)
我尝试在 settings.py …
所以我有一个python脚本输出文本到控制台,我需要记录到文件,但脚本是非常复杂的,我不编码python,所以我宁愿不改变它.
我想做这个
>python script.py arg1 arg2 ... argn > "somefile.txt"
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我的猜测是python采取>和"somefile.txt"作为参数..
这可以实现吗?如何实现?
使用 python logging 包,并编写一个类 Log,我想将 stdout 和 stderr 发送到日志文件:
log = Log("log.txt")
print "line1"
print "line2"
print >>sys.stderr, "err1"
del log
print "line to screen only"
Run Code Online (Sandbox Code Playgroud)
输出日志文件将包含:
16/11/2017 09:51:58 INFO - line1
16/11/2017 09:51:58 INFO - line2
16/11/2017 09:51:58 INFO - err1
Run Code Online (Sandbox Code Playgroud)
知道如何编写这个 Log 类,保持“日志”包(时间戳,...)的优势吗?