我们在我们的项目中使用SLF4J + Logback组合已经有一段时间了,并且对它非常满意,但是我们的日志记录策略相当简单,使用简单的基于类的记录器并且没有像MDC或Markers这样的花哨的东西.
我想知道的是,社区中是否有人实际使用这些功能以及它们如何用于改进日志记录/过滤.
我特别感兴趣的是在哪里,为什么以及如何使用[1]标记进行记录.他们认为这是一个非常简洁的功能,可以在记录中添加语义上下文 - 例如,当一个类可能正在处理多个问题时,可以使用任务/关注特定标记来区分日志语句.
在日志记录中创建和使用标记的最佳实践,约定或策略可能是什么.
更新:我想,我真正追求的不是为什么使用标记,而是如何使用标记- 是否有一些命名标记的好方法(例如使用带空格的明文或短划线/下划线/标点符号分隔的关键字样式名称),是否应该有某种"标准名称"池,根据业务功能命名.我可以为自己解决的问题,但如果我想系统地使用这些功能并将它们介绍给开发人员团队,那么就可以制定一些可正式的指导方针......
[1] - 通过询问如何使用标记我并不是真的问如何使用API(它确实非常直接) - 我更倾向于指出如何设置使用标记一致地记录的更一般级别
我试图从SQL控制台中看到Oracle BLOB中的内容.
我知道它包含一些有点大的文本,我想只看到文本,但是下面的查询只表明该字段中有一个BLOB:
select BLOB_FIELD from TABLE_WITH_BLOB where ID = '<row id>';
Run Code Online (Sandbox Code Playgroud)
我得到的结果并不完全符合我的预期:
BLOB_FIELD
-----------------------
oracle.sql.BLOB@1c4ada9
那么我可以做什么样的神奇咒语来将BLOB变成它的文本表示?
PS:我只是试图从SQL控制台(Eclipse Data Tools)查看BLOB的内容,而不是在代码中使用它.
如果服务器返回错误,我在检索Json响应时遇到问题.详情见下文.
我用java.net.HttpURLConnection.我设置了请求属性,然后我做:
conn = (HttpURLConnection) url.openConnection();
Run Code Online (Sandbox Code Playgroud)
在那之后,当请求成功时,我得到了Json的回复:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
当服务器返回50x或40x之类的错误时,我无法检索收到的Json.以下行抛出IOException:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com
Run Code Online (Sandbox Code Playgroud)
服务器确定发送正文,我在外部工具Burp Suite中看到它:
HTTP/1.1 401 Unauthorized
{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法获得响应消息(即"内部服务器错误")和代码(即"500"):
conn.getResponseMessage();
conn.getResponseCode();
Run Code Online (Sandbox Code Playgroud)
但我无法检索请求正文...也许有一些方法我没有在库中注意到?
我是Visual Studio的新手,来自Eclipse上的Java开发.我非常想念Eclipse的其他内容是能够查看二进制程序集的来源.
在Eclipse中,我可以附加对引用jar的源代码的引用,之后很容易导航到源代码,添加断点并调试这些代码,好像我在工作区中有库.
到目前为止,我还没有设法将源代码附加到程序集引用.
可能吗?我该怎么做(假设我有权访问这个库的源代码)?
是否有通过UPnP实现服务发现和发布的库?
(我试图找到JmDNS的一些替代方案,虽然协议方面为我们的目的工作得很好,但作为一个库非常不稳定,具有令人无法接受的不良崩溃倾向.)
我正在尝试在Django中创建我的第一个站点,因为我正在寻找示例应用程序以从中汲取灵感,我经常偶然发现一个名为"可重用应用程序"的术语.
我理解一个可重用的应用程序的概念很简单,但在Django中重用应用程序的方法对我来说已经完全失去了.在整个企业中,几乎没有什么问题困扰我:
重用现有Django应用程序的首选方法是什么?我在哪里放它,我该如何引用它?
根据我的理解,建议将它放在你的"PYTHONPATH"上,但是一旦我需要将我的应用程序部署到我有限访问权限的远程位置(例如在托管服务上),就会中断.
因此,如果我在本地计算机上开发我的网站并打算将其部署在我只有ftp访问权限的ISP上,我该如何重新使用第三方Django应用程序,这样如果我部署我的网站,该网站将继续工作(例如我唯一能指望的是服务提供商安装了Python 2.5和Django 1.x)?
如何组织我的Django项目,以便我可以轻松地将它与我想要使用的所有可重用应用程序一起部署?
我正在寻找处理混合项目类型之间的项目间依赖关系的最佳实践,其中一些项目是eclipse插件/ OSGI包项目(RCP应用程序),而其他项目只是普通的旧Java项目(Web服务模块).很少有eclipse插件依赖于Java项目.
我的问题是,至少就我看来,没有办法在Eclipse PDE环境中干净地表达这种依赖.我可以让插件项目依赖于其他插件项目(通过Import-Package或Require-Bundle清单头文件),但不是普通的java项目.
我似乎能够让项目从工作空间中的另一个项目声明对jar的依赖,但这些jar文件既不会被导出也不会被启动配置(虽然,java代码编辑看到库很好).
"Java项目"用于构建部署在J2EE容器(目前为JBoss 4.2.2)上的服务,并在某些情况下生成多个jar - 一个用于部署到JBoss耳朵,另一个用于客户端代码(一个用于客户端代码) RCP应用程序).
我们现在"解决"这个问题的方式是我们还有两个外部工具启动器配置 - 一个用于构建所有jar,另一个用于将这些jar复制到插件项目中.这样做(有点),但是"整个构建"和"复制罐子"目标会产生相当大的构建步骤,绕过整个eclipse增量构建功能并通过复制jar而不是仅仅引用项目我将依赖关系信息解耦并请求相当大的工作空间刷新,这就像糖果一样耗尽了开发时间.
我想要的是一个更加"自然"的工作空间设置,它可以管理项目之间的依赖关系并仅在需要时请求增量重建,能够使用RCP应用程序插件中的服务库中的客户端代码并且能够启动RCP应用程序,其中包含所需的所有必需类.
那么我可以吃蛋糕吗?)
需要明确的是,目前依赖管理和模块管理与Eclipse PDE配置有关.
我很清楚[Maven],[Ivy]和[Buckminster]等产品,他们解决了一个完全不同的问题(一旦我解决了工作区配置问题,这些产品实际上可以派上用场实现工作空间和构建产品)
我目前正在研究Java可用的各种服务发现协议,并提出了一个小列表:
可能有更多的选择,如果是这样,我邀请你加入tham.
我希望能够从使用其中一种或多种方案的人那里获得每种方案的优缺点的客观列表.如何实现发布和发现服务,协议的"chattiness",它的可靠性(协议和实现),它是否需要集中的服务目录,还是p2p /分散等等.
您会选择哪一种在LAN上无缝自动发现多个设备/服务?
我要求建议应该使用什么样的标记来标记HTML中的内容类型的内容作为转录的访谈,以最清洁和语义最明智的方式?
最好是我想要一些有效的HTML5,但这不是一个硬性要求.
(我最初的冲动是使用<dl>,<dt>和<dd>标签,但似乎不适合某些原因)
Ps - 我只是在通常代表HTML中的会话类型内容的良好清洁方式的前景.
有人发布了使用<dialog>标签的建议,但WHATWG禁止使用标签,他们的官方替换建议是使用一系列<p>标签:似乎该<dialog>标签已被禁止使用HTML5,并且没有提出合理的替代品.规范本身表示应该将对话标记为一系列p标记:https://html.spec.whatwg.org/multipage/scripting.html#conversations
我想指定我的路由表,以便他们感觉更"自然"
/Products /Product/17 /Product/Edit/17 /Product/Create
接近默认配置但是"Index"操作将映射到控制器名称的倍数形式,"Details"操作将直接映射到控制器名称后面的项目ID.
我知道我可以通过明确定义这样的特殊路由映射来实现这一点:
routes.MapRoute(
"ProductsList",
"Products",
new { controller = "Product", action = "Index" }
);
routes.MapRoute(
"ProductDetails",
"Product/{id}",
new { controller = "Product", action = "Details" }
);
/*
* Ditto for all other controllers
*/
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
上面的代码对我的口味来说过于冗长,并且有一个缺点,即每个控制器需要至少提及两次才能预先应用这个url模式.
有什么方法可以概括这一点,还是我在这种情况下必然会受到体力劳动?