默认情况下logging.Formatter('%(asctime)s'),使用以下格式打印:
2011-06-09 10:54:40,638
Run Code Online (Sandbox Code Playgroud)
其中638是毫秒.我需要将逗号更改为点:
2011-06-09 10:54:40.638
Run Code Online (Sandbox Code Playgroud)
格式化我可以使用的时间:
logging.Formatter(fmt='%(asctime)s',datestr=date_format_str)
Run Code Online (Sandbox Code Playgroud)
但是文档没有指定如何格式化毫秒.我发现这个SO问题谈论微秒,但是a)我更喜欢毫秒和b)以下不适用于Python 2.6(我正在研究),因为%f:
logging.Formatter(fmt='%(asctime)s',datefmt='%Y-%m-%d,%H:%M:%S.%f')
Run Code Online (Sandbox Code Playgroud) 我正在使用logback/slf4j进行日志记录.我想解析我的日志文件来分析一些数据,所以我想要有两个记录器实例,每个记录器实例都记录到一个单独的文件中,而不是解析一个很棒的大文件(主要由调试语句组成); 一个用于分析,一个用于所有目的的日志记录.有没有人知道这是否可以使用Logback或任何其他记录器?
我正在编写一个Web服务(使用ASP.NET MVC),出于支持目的,我们希望能够尽可能接近原始的在线格式(即包括HTTP)来记录请求和响应方法,路径,所有标题和正文)到数据库中.
我不确定的是如何以最少的"损坏"方式获取这些数据.通过检查HttpRequest对象的所有属性并从中构建字符串(以及类似的响应),我可以重新构建我认为请求的样子,但我真的想要获取实际的请求/响应数据.发送电线.
我很乐意使用任何拦截机制,如过滤器,模块等,解决方案可以特定于IIS7.但是,我更喜欢将其保留在托管代码中.
有什么建议?
编辑:我注意到HttpRequest有一个SaveAs方法可以将请求保存到磁盘,但是这会使用无法公开访问的内部帮助程序方法从内部状态重建请求(这就是为什么这不允许保存到用户提供的流我不知道).所以它开始看起来我将不得不尽最大努力重建来自对象的请求/响应文本......呻吟.
编辑2:请注意我说的整个请求包括方法,路径,标题等.当前响应只查看不包含此信息的正文流.
编辑3:没有人在这里阅读问题吗?到目前为止,有五个答案,但是没有一个答案暗示了一种获得整个原始线上请求的方法.是的,我知道我可以从请求对象中捕获输出流和标题以及URL和所有内容.我在问题中已经说过了,请看:
通过检查HttpRequest对象的所有属性并从中构建字符串(以及类似的响应),我可以重新构建我认为请求的样子,但我真的想得到实际的请求/响应数据这是通过电线发送的.
如果你知道完整的原始数据(包括header,url,http方法等)根本无法检索,那么知道这将是有用的.同样地,如果你知道如何以原始格式获取所有内容(是的,我仍然意味着包括标题,网址,http方法等),而不必重新构建它,这就是我所问的,那将是非常有用的.但告诉我,我可以从HttpRequest/ HttpResponse对象重建它是没有用的.我知道.我已经说过了.
请注意:在任何人开始说这是一个坏主意,或将限制可扩展性等之前,我们还将在分布式环境中实施限制,顺序传递和反重放机制,因此无论如何都需要数据库日志记录.我不是在寻找关于这是否是一个好主意的讨论,我正在寻找如何做到这一点.
我在哪里可以查看Eclipse中的Tomcat日志文件?
出于某种原因,我的Tomcat安装/日志文件夹始终为空.
BTW,Tomcat会在一段时间后转储到日志文件中还是立即转储?
有没有办法写入此事件日志:

或者至少,一些其他Windows默认日志,我不必注册事件源?
我正在使用Python的日志记录模块,我想暂时禁用控制台日志记录,但它不起作用.
#!/usr/bin/python
import logging
logger = logging.getLogger() # this gets the root logger
# ... here I add my own handlers
#logger.removeHandler(sys.stdout)
#logger.removeHandler(sys.stderr)
print logger.handlers
# this will print [<logging.StreamHandler instance at ...>]
# but I may have other handlers there that I want to keep
logger.debug("bla bla")
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了bla blaon stdout,我不知道如何安全地禁用控制台处理程序.我怎么能确定我暂时删除了控制台StreamHandler而不是另一个?
我有以下logback.xml文件:
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
现在,在发生特定事件时,我想以编程方式将根记录器的级别从调试更改为错误.我不能使用变量替换,我必须在代码中执行此操作.
怎么做到呢 ?谢谢.
我想阻止maven显示INFO消息,我想只看到警告和错误(如果有的话).
我怎样才能实现这一点,最好是通过更改调用maven的命令行来实现?
它仍然是值得log4j的库添加到Java 5的项目只是为了记录让我们说一些例外文件与一些不错的结余设置.或者标准的util.logging工具也可以完成这项工作吗?
你怎么看?
我理解为什么log4net使用app.config文件来设置日志记录 - 这样您就可以轻松更改信息的记录方式,而无需重新编译代码.但在我的情况下,我不想app.config用我的可执行文件打包文件.我不想修改我的日志记录设置.
有没有办法让我设置登录代码而不是使用app.config?
这是我的简单配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\EventLog.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
</appender>
<root>
<level value="Info" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="MemoryAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
编辑:
要完全清楚:我的目标是没有XML文件.甚至不是我变成流的嵌入式资源.我的目标是完全以编程方式定义记录器.只是好奇是否有可能,如果是这样,我可能会找到一个语法示例.