我有一个Python应用程序,其文件结构类似于以下内容:
/Project
file1.py
file2.py
file3.py
...
Run Code Online (Sandbox Code Playgroud)
该应用程序正在CentOS 6环境中运行,因此正在使用Python 2.6。
我感兴趣的是建立一种通用的日志记录机制,其中每个文件的日志语句都将写入磁盘上的同一日志文件。这些python文件通常是从命令行执行的,彼此之间有些独立。我测试了以下文档中的一个建议(在此处链接):
log = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)
我发现,所有日志行都将被列为from __main__,而不管log语句来自哪个文件。换句话说,我无法确定给定日志行来自哪个文件。
我希望可以得到一个日志文件,其内容类似于以下内容:
2017-01-17 10:48:47,446 - file1 - DEBUG - this is from file1
2017-01-17 10:48:47,447 - file2 - DEBUG - this is from file2
2017-01-17 10:48:47,447 - fiel3 - DEBUG - this is from file3
Run Code Online (Sandbox Code Playgroud)
在上面,我将执行:
log.debug("this is from file1")
Run Code Online (Sandbox Code Playgroud)
在file1.py和其他文件类似的日志行,替换日志声明适当的文字。
我目前正在使用以下设置日志记录:
########################################
# Setup Logging
########################################
LOG_FILENAME = 'app.log'
# Set up a specific logger with our desired output level …Run Code Online (Sandbox Code Playgroud) 我正在开发一个使用多个长时间运行的工作线程的流式java应用程序。应用程序接收数据、处理数据,然后使用其 SDK 将其发送给第三方。有一个Engine类接收数据并将其提交给Workers。只要应用程序运行,工作线程就会存在,这可能是几个月甚至几年。
我已经包含了代表这个问题的关键部分的示例代码。
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BarEngine implements Engine
{
static Logger log = LoggerFactory.getLogger(BarEngine.class);
private static final int WORKER_COUNT = 5;
private BlockingQueue<Map<String, Object>> queue;
private FooWorker[] workers = new FooWorker[WORKER_COUNT];
public BarEngine()
{
for (int i = 0; i < WORKER_COUNT; i++)
{
workers[i] = new FooWorker(i, queue);
workers[i].start();
}
}
// From Engine Interface
@Override
public void sendEvent(final Map<String, Object> data)
{
try …Run Code Online (Sandbox Code Playgroud) 我在 Java 应用程序中使用Jackson JSON 库及其树模型系统 ( JsonNode)。在此,我需要检查一个是否ArrayNode包含给定的JsonNode. 我一直在寻找通过JavaDoc中,我没有看到任何形式的.contains()对方法ArrayNode。我最终自己编写了一个包含方法:
public static boolean arrayNodeContains(ArrayNode arrayNode, JsonNode node) {
Stream<JsonNode> nodeStream = StreamSupport.stream(arrayNode.spliterator(), false);
return nodeStream.anyMatch(j -> j.equals(node));
}
Run Code Online (Sandbox Code Playgroud)
单元测试:
@Test
public void testArrayNodeContains()
throws IOException
{
ObjectMapper mapper = new ObjectMapper;
String arrayJsonString = "[{\"foo\":\"bar\"},{\"foo\":\"baz\"},{\"baz\":\"bar\"}]";
String nodeTrueJsonString = "{\"foo\":\"bar\"}";
String nodeFalseJsonString = "{\"foo\":\"brains\"}";
List<Object> list = mapper.readValue(arrayJsonString, List.class);
ArrayNode arrayNode = mapper.valueToTree(list);
Map<String, Object> nodeTrueMap = mapper.readValue(nodeTrueJsonString, Map.class);
JsonNode nodeTrue …Run Code Online (Sandbox Code Playgroud) 假设我有一个目录“foo”,其中包含我的 Azure 函数项目,它是用 TypeScript 构建的。我的结构类似于Azure Function的JavaScript 文档中描述的结构(TypeScript 文件夹结构与 JavaScript 文件夹结构非常相似)。我现在想要创建一个可以使用Zip 部署机制发布到 Azure 的 zip 文件。如何手动创建 zip 文件,然后将其发布到 Azure Functions?
注意:我使用Azure Function Core Tools引导项目并在 macOS 上使用 Visual Studio Code 进行开发
我使用 Azure Log Analytics 作为 Azure Application Insights 的一部分。我正在尝试编写一些 Kusto 查询来解析一些使用 Application Insights Javascript SDK 生成的日志记录。以下是一些示例消息:
"index.ts: imports: 1556.916ms"
"index.ts: imports: 110.486ms import { } from '@azure/keyvault-secrets'"
"index.ts: imports: 110.396ms import { } from '@azure/event-hubs'"
"index.ts: imports: 110.023ms import { } from 'applicationinsights'"
"index.ts: imports: 0.131ms import { } from '@azure/functions'"
Run Code Online (Sandbox Code Playgroud)
在 Azure Application Insights 内的 Log Analytics 中,我尝试使用extract(). 到目前为止,我的 Kusto 查询看起来像:
traces
| where message contains "imports"
| extend file = extract("^.+\.ts", 1, message)
| sort by …Run Code Online (Sandbox Code Playgroud)