如何将LogicalThreadContext包含到日志输出中?

时间:2016-09-06 09:54:24

标签: c# log4net

来自LogicalThreadContext文档:

  

逻辑线程上下文具有属性映射和堆栈。该   属性和堆栈可以包含在日志消息的输出中。   PatternLayout支持选择和输出这些属性。

%x模式不会从LogicalThreadContext.Stacks["LDC"]输出任何内容。我无法在docs中找到任何模式来输出它。

如何将其包含在日志中?

1 个答案:

答案 0 :(得分:1)

您可以使用

包装代码
AddressPicker.prototype.initMap = function() {
    var markerOptions, _ref, _ref1;
    if ((_ref = this.options) != null ? (_ref1 = _ref.map) != null ? _ref1.gmap : void 0 : void 0) {
      this.map = this.options.map.gmap;
    } else {
      this.mapOptions = $.extend({
        zoom: 3,
        center: new google.maps.LatLng(0, 0),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        boundsForLocation: this.updateBoundsForPlace
      }, this.options.map);
      this.map = new google.maps.Map($(this.mapOptions.id)[0], this.mapOptions);
    }
    this.lastResult = null;
    markerOptions = $.extend({
      draggable: true,
      visible: false,
      position: this.map.getCenter(),
      map: this.map
    }, this.options.marker || {});
    this.marker = new google.maps.Marker(markerOptions);
    if (markerOptions.draggable) {
      return google.maps.event.addListener(this.marker, 'dragend', this.markerDragged);
    }
  };


  AddressPicker.prototype.updateMap = function(event, place) {
    if (this.options.placeDetails) {
      return this.placeService.getDetails(place, (function(_this) {
        return function(response) {
          var _ref;
          _this.lastResult = new AddressPickerResult(response);
          if (_this.marker) {
            _this.marker.setPosition(response.geometry.location);
            _this.marker.setVisible(true);
          }
          if (_this.map) {
            if ((_ref = _this.mapOptions) != null) {
              _ref.boundsForLocation(response);
            }
          }
          return $(_this).trigger('addresspicker:selected', _this.lastResult);
        };
      })(this));
    } else {
      return $(this).trigger('addresspicker:selected', place);
    }
  };

  AddressPicker.prototype.updateBoundsForPlace = function(response) {
    if (response.geometry.viewport) {
      return this.map.fitBounds(response.geometry.viewport);
    } else {
      this.map.setCenter(response.geometry.location);
      return this.map.setZoom(this.options.zoomForLocation);
    }
  };

并将其添加到您的模式中

using (log4net.ThreadContext.Stacks["stackName"].Push("Text you want to stack"))
{
    [your code]
}

例如如果您有多个级别,则可以为堆栈使用相同的名称:

(%property{stackName})

使用类似

的模式
using (log4net.ThreadContext.Stacks["SN"].Push("level 1"))
{
    using (log4net.ThreadContext.Stacks["SN"].Push("level 2"))
    {
        log.Debug("Log Text");
    }
}

会输出类似

的内容
(%property{SN}) [%message]

如果您想了解更多信息,可以查看Jim Christopher's blog