微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不同接收器的不同级别的 Serilog

如何解决不同接收器的不同级别的 Serilog

我有以下一段 c# 代码,用于编写具有多个接收器(控制台和文件)的日志,我如何限制控制台仅记录(信息、警告和错误)和文件以记录所有内容

var outputTemplate = "[{Level:u3}] {Message:lj}{NewLine}{Exception}";

// Logger  

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .Writeto.Console(outputTemplate: outputTemplate,theme:SystemConsoleTheme.Literate)
    .Writeto.File($"logs/log-{DateTime.Now:yyyy-MM-dd_HH:mm:ss.fff}.log")              
    .CreateLogger();

解决方法

您可以为每个接收器设置一个 package net.laser.eyes; import org.lwjgl.glfw.GLFW; import net.minecraft.client.options.KeyBinding; import net.minecraft.client.util.InputUtil; import net.minecraft.text.LiteralText; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.fabricmc.fabric.api.event.client.ClientTickCallback; import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.rendering.v1.*; import net.minecraft.block.*; import net.minecraft.client.*; import net.minecraft.client.gui.*; import net.minecraft.client.util.math.*; import net.minecraft.entity.*; import net.minecraft.entity.decoration.*; import net.minecraft.entity.projectile.*; import net.minecraft.text.*; import net.minecraft.util.hit.*; import net.minecraft.util.math.*; import net.minecraft.world.*; public class main implements ModInitializer { @Override public void onInitialize() { KeyBinding binding1 = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.laser-eyes.shoot",InputUtil.Type.KEYSYM,GLFW.GLFW_KEY_R,"key.category.laser.eyes")); HudRenderCallback.EVENT.register(main::displayBoundingBox); ClientTickCallback.EVENT.register(client -> { while (binding1.wasPressed()) { client.player.sendMessage(new LiteralText("Key 1 was pressed!"),false); } }); } private static long lastCalculationTime = 0; private static boolean lastCalculationExists = false; private static int lastCalculationMinX = 0; private static int lastCalculationMinY = 0; private static int lastCalculationWidth = 0; private static int lastCalculationHeight = 0; private static void displayBoundingBox(MatrixStack matrixStack,float tickDelta) { long currentTime = System.currentTimeMillis(); if(lastCalculationExists && currentTime - lastCalculationTime < 1000/45) { drawHollowFill(matrixStack,lastCalculationMinX,lastCalculationMinY,lastCalculationWidth,lastCalculationHeight,2,0xffff0000); return; } lastCalculationTime = currentTime; MinecraftClient client = MinecraftClient.getInstance(); int width = client.getWindow().getScaledWidth(); int height = client.getWindow().getScaledHeight(); Vec3d cameraDirection = client.cameraEntity.getRotationVec(tickDelta); double fov = client.options.fov; double angleSize = fov/height; Vector3f verticalRotationAxis = new Vector3f(cameraDirection); verticalRotationAxis.cross(Vector3f.POSITIVE_Y); if(!verticalRotationAxis.normalize()) { lastCalculationExists = false; return; } Vector3f horizontalRotationAxis = new Vector3f(cameraDirection); horizontalRotationAxis.cross(verticalRotationAxis); horizontalRotationAxis.normalize(); verticalRotationAxis = new Vector3f(cameraDirection); verticalRotationAxis.cross(horizontalRotationAxis); HitResult hit = client.crosshairTarget; if (hit.getType() == HitResult.Type.MISS) { lastCalculationExists = false; return; } int minX = width; int maxX = 0; int minY = height; int maxY = 0; for(int y = 0; y < height; y +=2) { for(int x = 0; x < width; x+=2) { if(minX < x && x < maxX && minY < y && y < maxY) { continue; } Vec3d direction = map( (float) angleSize,cameraDirection,horizontalRotationAxis,verticalRotationAxis,x,y,width,height ); HitResult nextHit = rayTraceInDirection(client,tickDelta,direction);//TODO make less expensive if(nextHit == null) { continue; } if(nextHit.getType() == HitResult.Type.MISS) { continue; } if(nextHit.getType() != hit.getType()) { continue; } if (nextHit.getType() == HitResult.Type.BLOCK) { if(!((BlockHitResult) nextHit).getBlockPos().equals(((BlockHitResult) hit).getBlockPos())) { continue; } } else if(nextHit.getType() == HitResult.Type.ENTITY) { if(!((EntityHitResult) nextHit).getEntity().equals(((EntityHitResult) hit).getEntity())) { continue; } } if(minX > x) minX = x; if(minY > y) minY = y; if(maxX < x) maxX = x; if(maxY < y) maxY = y; } } lastCalculationExists = true; lastCalculationMinX = minX; lastCalculationMinY = minY; lastCalculationWidth = maxX - minX; lastCalculationHeight = maxY - minY; drawHollowFill(matrixStack,minX,minY,maxX - minX,maxY - minY,0xffff0000); LiteralText text = new LiteralText("Bounding " + minX + " " + minY + " " + width + " " + height + ": "); client.player.sendMessage(text.append(getLabel(hit)),true); //SET THE BLOCK (maybe use hit.getPos(); to find it??) } private static void drawHollowFill(MatrixStack matrixStack,int x,int y,int width,int height,int stroke,int color) { matrixStack.push(); matrixStack.translate(x-stroke,y-stroke,0); width += stroke *2; height += stroke *2; DrawableHelper.fill(matrixStack,stroke,color); DrawableHelper.fill(matrixStack,width - stroke,height,height - stroke,color); matrixStack.pop(); } private static Text getLabel(HitResult hit) { if(hit == null) return new LiteralText("null"); switch (hit.getType()) { case BLOCK: return getLabelBlock((BlockHitResult) hit); case ENTITY: return getLabelEntity((EntityHitResult) hit); case MISS: default: return new LiteralText("null"); } } private static Text getLabelEntity(EntityHitResult hit) { return hit.getEntity().getDisplayName(); } private static Text getLabelBlock(BlockHitResult hit) { BlockPos blockPos = hit.getBlockPos(); BlockState blockState = MinecraftClient.getInstance().world.getBlockState(blockPos); Block block = blockState.getBlock(); return block.getName(); } private static Vec3d map(float anglePerPixel,Vec3d center,Vector3f horizontalRotationAxis,Vector3f verticalRotationAxis,int height) { float horizontalRotation = (x - width/2f) * anglePerPixel; float verticalRotation = (y - height/2f) * anglePerPixel; final Vector3f temp2 = new Vector3f(center); temp2.rotate(verticalRotationAxis.getDegreesQuaternion(verticalRotation)); temp2.rotate(horizontalRotationAxis.getDegreesQuaternion(horizontalRotation)); return new Vec3d(temp2); } private static HitResult rayTraceInDirection(MinecraftClient client,float tickDelta,Vec3d direction) { Entity entity = client.getCameraEntity(); if (entity == null || client.world == null) { return null; } double reachDistance = 5.0F; HitResult target = rayTrace(entity,reachDistance,false,direction); boolean tooFar = false; double extendedReach = 6.0D; reachDistance = extendedReach; Vec3d cameraPos = entity.getCameraPosVec(tickDelta); extendedReach = extendedReach * extendedReach; if (target != null) { extendedReach = target.getPos().squaredDistanceTo(cameraPos); } Vec3d vec3d3 = cameraPos.add(direction.multiply(reachDistance)); Box box = entity .getBoundingBox() .stretch(entity.getRotationVec(1.0F).multiply(reachDistance)) .expand(1.0D,1.0D,1.0D); EntityHitResult entityHitResult = ProjectileUtil.raycast( entity,cameraPos,vec3d3,box,(entityx) -> !entityx.isSpectator() && entityx.collides(),extendedReach ); if (entityHitResult == null) { return target; } Entity entity2 = entityHitResult.getEntity(); Vec3d hitPos = entityHitResult.getPos(); if (cameraPos.squaredDistanceTo(hitPos) < extendedReach || target == null) { target = entityHitResult; if (entity2 instanceof LivingEntity || entity2 instanceof ItemFrameEntity) { client.targetedEntity = entity2; } } return target; } private static HitResult rayTrace( Entity entity,double maxDistance,boolean includeFluids,Vec3d direction ) { Vec3d end = entity.getCameraPosVec(tickDelta).add(direction.multiply(maxDistance)); return entity.world.raycast(new RaycastContext( entity.getCameraPosVec(tickDelta),end,RaycastContext.ShapeType.OUTLINE,includeFluids ? RaycastContext.FluidHandling.ANY : RaycastContext.FluidHandling.NONE,entity )); } } 值,以提高它应该记录的最低级别。

文档中有示例说明:

here

restrictedToMinimumLevel

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?