我的 Python 3 应用程序使用标准日志记录包。我想从我的代码中记录所有信息级别的消息,但确保日志记录忽略第三方包发出的所有信息消息,例如请求。
每次使用 requests.get 之前和之后调用 Logger.setLevel(lvl) 应该可以工作,但它非常乏味。我想我可以使用装饰器,但是有更简单的方法吗?
我正在使用select2 4.0.1,并且需要更改某些单词的字体。更具体地说,我需要以粗体/不同字体显示代码AK和HI,如下所示:
<select id="select2" style="width:300px">
<optgroup label="Alaskan/Hawaiian Time Zone">
<option value="AK"><strong>AK</strong> Alaska</option>
<option value="HI"><strong>HI</strong> Hawaii</option>
</optgroup>
Run Code Online (Sandbox Code Playgroud)
可能吗?我该怎么做?
I am deserializing json that contains instances of many different classes, using gson. The following works as long as I know all the classes up front:
String receivedPayloadStr = receivedMessage.get("payload");
Type payloadType = getType(receivedMessage.get("type").toString());
Object typedPayload = gson.fromJson(payloadJson, payloadType);
System.out.println(typedPayload);
Run Code Online (Sandbox Code Playgroud)
My getType function is as follows:
static Type getType(String typeName){
switch (typeName){
case "mypackage1.MyThing1":
return new TypeToken<MyThing1>() {}.getType();
case "mypackage2.MyThing1":
return new TypeToken<MyThing2>() {}.getType();
default:
throw new RuntimeException("Unsupported type: " + typeName);
}
}
Run Code Online (Sandbox Code Playgroud)
短期有效,但既丑陋又脆弱。显然,我们想要一种更易于维护的方法。有没有办法以通用方式实现 getType ,以便支持所有已知类?
编辑:我们不仅限于 gson。如果另一个库使任务更容易,我们可以切换到它。
每当我启动以下代码时:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String exchangeName = "direct_logs";
channel.exchangeDeclare(exchangeName, "direct");
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchangeName, "red");
channel.basicQos(1);
final Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag,
Envelope envelope,
AMQP.BasicProperties properties,
byte[] body) throws IOException{
String message = new String(body, "UTF-8");
System.out.println(message);
System.out.println("message received");
}
};
channel.basicConsume(queueName, true, consumer);
Run Code Online (Sandbox Code Playgroud)
它不会像文档中所暗示的那样开始无限循环。相反,它会立即停止。我可以消耗一段时间的唯一方法是channel.basicConsume用循环替换,如下所示:
DateTime startedAt = new DateTime();
DateTime stopAt = startedAt.plusSeconds(60);
long i=0;
try {
while (stopAt.compareTo(new …Run Code Online (Sandbox Code Playgroud) 以下函数旨在运行循环 20 分钟,处理 SQL 任务(如果可用)。为了避免在没有什么可处理的情况下过多的 SQL 调用,它打算在尝试再次处理任务之前休眠 5 秒:
def main():
sql = 'some sql task here;'
stop_time = datetime.today() + timedelta(minutes = 20)
print('Started at ', datetime.now())
print('Should stop at', stop_time)
load_more_rows = True
with ConnectionParameters.get_conn() as conn:
while load_more_rows or (datetime.now() < stop_time):
try:
res = get_num_processed_batches(conn, sql)
processed_batch = res > 0
except Exception as ex:
log_error(repr(ex))
processed_batch = False
if not processed_batch:
print('Sleeping at ', datetime.now())
time.sleep(seconds=5)
load_more_rows = processed_batch
print('Finished iteration at ', datetime.now())
print('Stopped …Run Code Online (Sandbox Code Playgroud) 我希望以下Java代码将字符串拆分为三个项目:
String csv = "1,2,";
String[] tokens = csv.split(",");
System.out.println(tokens.length);
Run Code Online (Sandbox Code Playgroud)
但是,我只收到两件物品.
我必须承认,我没有深入分析这一点,但这对我来说似乎是违反直觉的.Python和C#都在Python中生成三个项目,如下所示:
def test_split(self):
line = '1,2,'
tokens = line.split(",")
for token in tokens:
print('-' + token)
-1
-2
-
Run Code Online (Sandbox Code Playgroud)
在C#中:
[Test]
public void t()
{
string s = "1,2,";
var tokens = s.Split(',');
foreach (var token in tokens)
{
Console.WriteLine("-" + token);
}
}
-1
-2
-
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
这是Java 1.8.0_101.