我正在尝试学习应用程序的工作原理.为此,我将调试命令作为每个函数体的第一行插入,目的是记录函数的名称以及我向日志输出发送消息的行号(在代码中).最后,由于此应用程序包含许多文件,因此我想创建一个日志文件,以便我可以更好地理解应用程序的控制流.
这就是我所知道的:
为了获取函数名称,我可以使用function_name.__name__
但我不想使用function_name(这样我就可以Log.info("Message")
在所有函数的主体中快速复制和粘贴泛型).我知道这可以在C中使用__func__
宏完成,但我不确定python.
为了获取文件名和行号,我已经看到(并且我相信)我的应用程序正在使用Python locals()
函数,但是在我不完全了解的语法中,例如:options = "LOG.debug('%(flag)s : %(flag_get)s' % locals())
我尝试使用类似LOG.info("My message %s" % locals())
产生的东西{'self': <__main__.Class_name object at 0x22f8cd0>}
.有什么意见吗?
我知道如何使用日志记录并向其添加处理程序以记录到文件,但我不确定是否可以使用单个文件以正确的项目函数调用顺序记录所有日志消息.
我非常感谢任何帮助.
谢谢!
我即将选择组织我的观点(使用spring-mvc,但这不应该太重要)
据我所知,有6个选项(尽管它们并不相互排斥):
<jsp:include>
<%@ include file="..">
Tiles和Sitemesh可以分组; 所以可以的Freemarker和速度.每个小组中使用哪一个不是这个讨论的问题,有足够的问题和讨论.
这是一个有趣的读物,但不能说服我使用瓷砖.
我的问题是 - 这些框架提供的内容 <@ include file="..">
与JSTL 无法正常完成.要点(一些来自文章):
包括部分页面,如页眉和页脚 - 之间没有区别:
<%@ include file="header.jsp" %>
Run Code Online (Sandbox Code Playgroud)
和
<tiles:insert page="header.jsp" />
Run Code Online (Sandbox Code Playgroud)在标题中定义参数 - 如标题,元标记等.这非常重要,尤其是从SEO的角度来看.使用模板选项,您只需定义每个页面应定义的占位符.但是你可以在jsp中使用JSTL,使用<c:set>
(在包含页面中)和<c:out>
(在包含的页面中)
布局重组 - 如果要在菜单上方移动面包屑,或在另一个侧面板上方移动登录框.如果页面包含(使用jsp)组织不当,则可能需要在这种情况下更改每个页面.但是如果你的布局不是太复杂,并且你把常见的东西放在页眉/页脚中,就没有什么可担心的了.
公共组件和特定内容之间的耦合 - 我没有发现这个问题.如果要重用某些片段,请将其移动到不包含任何页眉/页脚的页面,并在需要的地方包含它.
效率 - <%@ include file="file.jsp" %>
比其他任何东西都更有效,因为它被编译一次.所有其他选项都被解析/执行多次.
复杂性 - 所有非jsp解决方案都需要额外的xml文件,其他包括,预处理器配置等.这既是学习曲线又是引入更多潜在的失败点.此外,它使支持和更改变得更加乏味 - 您必须检查许多文件/配置以了解正在发生的事情.
占位符 - 速度/自由标记比JSTL更多吗?在JSTL中,您放置占位符,并使用模型(放置在请求或会话范围内,由控制器)来填充这些占位符.
所以,说服我除了普通的JSP之外我应该使用上面的任何框架而不是/.
将Spring的配置拆分为多个xml文件的正确方法是什么?
目前我有
/WEB-INF/foo-servlet.xml
/WEB-INF/foo-service.xml
/WEB-INF/foo-persistence.xml
我web.xml
有以下几点:
<servlet>
<description>Spring MVC Dispatcher Servlet</description>
<servlet-name>intrafest</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/foo-*.xml
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/foo-*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
实际问题:
DispatcherServlet
和该context-param
板块?为了能够引用foo-servlet.xml
从中定义的bean,我需要记住foo-service.xml
什么?这是否与指定contextConfigLocation
有关web.xml
?
更新1:
我正在使用Spring framework 3.0.我的理解是,我不需要像这样进行资源导入:
<import resource="foo-services.xml"/>
Run Code Online (Sandbox Code Playgroud)
这是正确的假设吗?
我有一个函数,它接受了一些参数.但是下划线去抖的用法是:
var lazyLayout = _.debounce(calculateLayout, 300);
Run Code Online (Sandbox Code Playgroud)
但在我的情况下calculateLayout
需要一些参数来运行.在这种情况下如何通过它们?
更新:
示例calculateLayout
功能:
var calculateLayout = function(a,b) {
console.log('a is ' + a + ' and b is ' + b);
}
Run Code Online (Sandbox Code Playgroud) 通常,最简单的调试方法是使用printf
.我该怎么做来调试emacs-lisp?如何从elisp打印emacs编辑器?或者有没有办法调试elisp代码?
例如,如何检查以下代码是否在.emacs
文件中运行?
(load "auctex.el" nil t t)
Run Code Online (Sandbox Code Playgroud) 我正在部署一些不同的docker容器,mysql是第一个.我想在数据库启动后立即运行脚本并继续构建其他容器.该脚本一直在失败,因为当设置mysql(来自这个官方的mysql容器)的入口点脚本仍在运行时,它试图运行.
sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=MY_ROOT_PASS -p 3306:3306 -d mysql
[..] wait for mysql to be ready [..]
mysql -h 127.0.0.1 -P 3306 -u root --password=MY_ROOT_PASS < MY_SQL_SCRIPT.sql
Run Code Online (Sandbox Code Playgroud)
有没有办法等待在docker容器内完成入门的mysql安装脚本的信号?Bash睡眠似乎是次优解决方案.
编辑:去找这样的bash脚本.不是最优雅和善良的蛮力,但工作就像一个魅力.也许有人会觉得有用.
OUTPUT="Can't connect"
while [[ $OUTPUT == *"Can't connect"* ]]
do
OUTPUT=$(mysql -h $APP_IP -P :$APP_PORT -u yyy --password=xxx < ./my_script.sql 2>&1)
done
Run Code Online (Sandbox Code Playgroud) 我有20多个表格,它们是从同一页面链接的.某些表单共享同一个控制器,而其他表单使用自己的控制器 例如,形式A
,B
和C
使用DefaultController
,而形式D
使用ControllerD
.
我想要实现的是以一致的方式将URL映射到每个表单.
所以,理想情况下,链接页面看起来像:
这个
<a href="/formA.html">Form A</a>
<a href="/formB.html">Form B</a>
<a href="/formC.html">Form C</a>
<a href="/formD.html">Form D</a>
Run Code Online (Sandbox Code Playgroud)或这个:
<a href="/form.html?name=A">Form A</a>
<a href="/form.html?name=B">Form B</a>
<a href="/form.html?name=C">Form C</a>
<a href="/form.html?name=D">Form D</a>
Run Code Online (Sandbox Code Playgroud)问题是如何将每个URL映射到适当的控制器.使用第一个URL模式,您将映射formD.html
到ControllerD
但不确定如何映射form[A|B|C].html
到DefaultController
.使用第二个URL模式,我甚至不知道从哪里开始......
有没有人做过这样的事情?
这是我第一次使用java Rmi*.我有一个自定义类,它扩展UnicastRemoteObject
并实现了一个扩展远程的接口.我认为我已经在类中正确实现了接口的方法,但是IllegalArgumentException
当我尝试运行我的代码时,我仍然得到了一个(而且它是关于一个没有参数的方法).
jvm声称遇到了非法的远程方法,但该方法及其实现对我来说似乎没问题.
是否有任何其他原因导致除了错误地实现或调用方法之外可能发生此异常?
这是堆栈跟踪:
SEVERE: null
java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is:
java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.lang.String Node.getId()
at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.<init>(Unknown Source)
at java.rmi.server.UnicastRemoteObject.<init>(Unknown Source)
at NodeImpl.<init>(NodeImpl.java:30)
at NodeLauncher.main(NodeLauncher.java:11)
Caused by: java.lang.IllegalArgumentException: illegal remote method encountered: public abstract java.lang.String Node.getId()
at sun.rmi.server.Util.checkMethod(Unknown Source)
at sun.rmi.server.Util.getRemoteInterfaces(Unknown Source)
at sun.rmi.server.Util.getRemoteInterfaces(Unknown Source)
at sun.rmi.server.Util.createProxy(Unknown Source)
... 7 more
Run Code Online (Sandbox Code Playgroud)
这是界面:
import java.rmi.*;
import java.util.LinkedList; …
Run Code Online (Sandbox Code Playgroud) 我是Emacs的新手.
所以,我正在使用emacs 24和曝光的色彩主题.
当Emacs启动时,它提示我"加载一个主题可以运行Lisp代码,真的加载吗?".
当我回答"是"时,它会继续"在未来的会议中将此主题视为安全吗?".
如果我说"y",主题就会被加载,并且
(custom-set-variables
(custome-safe-themes (quote ("..." default))))
Run Code Online (Sandbox Code Playgroud)
自动添加到〜/ .emacs.
但是,每次打开Emacs时,这些问题都会回来!
什么是关闭它们的正确方法?
我想在Joda中改变Timestamp
by 的值:DateTimeZone
DateTime dt = new DateTime(rs.getTimestamp("anytimestampcolumn"),
DateTimeZone.forID("anytimezone"));
Timestamp ts = new Timestamp(dt.getMillis());
Run Code Online (Sandbox Code Playgroud)
因为DateTime
,价值是:2013-04-13T22:56:27.000+03:00
因为TimeStamp
,价值是:2013-04-13 22:56:27.0
Timestamp
即将到来没有时区差异.
如何使用TimeZone获得正确的时间戳? 例如,我想得到"2013-05-13 01:56:27.0".
提前致谢.
编辑:使用MySQL,列类型TIMESTAMP
当然rs
是ResultSet
.